• Spring基础知识1--环境搭建、bean创建、依赖注入、注解注入


    一、Spring两大核心内容

    1、控制反转IOC/DI:  应用本身不负责对象的创建和维护,对象和依赖对象的创建完全交给容器管理。

    2、AOP(面向切面编程):通过预编译的方式,在运行期通过动态代理的方式来实现的一种技术

      (1)在项目中使用AOP管理事务,事务的开启,提交,回滚

      (2)在项目中管理事务的传播特性。

    二、Spring的环境搭建

    1、导包:  

    2、创建Spring的配置文件 ApplicationContext.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     3         xmlns="http://www.springframework.org/schema/beans" 
     4
     5         xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
     7         
     8         
     9         ">
    10          
    11 </beans>

    3、创建bean

    <bean id="person" class="com.tx.model.Person"  >

    4、创建Spring容器

    1 @Test
    2     public void test1(){
    3         ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
    4         Person p = (Person) ctx.getBean("person");
    5         System.out.println(p);
    6     }

    三、Bean的创建方式

    1、使用构造器创建(常用)

      使用构造器创建bean,bean必须有默认的构造器

    2、使用静态工厂方式

      提供静态工厂:

    1 public class FactoryBean {
    2     /**
    3      * 必须是静态方法
    4      * @return
    5      */
    6     public static User createUser(){
    7         return new User();
    8     }
    9 }

      进行配置:

    1 <!-- id:唯一标识
    2         class:静态工厂的类
    3         factory-method:静态工厂的方法
    4      -->
    5 <bean id="user" class="com.rl.spring.factory.FactoryBean" factory-method="createUser"></bean>

    3、实例工厂方式

      实例工厂:

    public class FactoryBean1 {
        public User createUser(){
            return new User();
        }
    }

      配置:

    1 <!-- 通过Spring来定义实例工厂 -->
    2     <bean id="factoryBean" class="com.rl.spring.factory.FactoryBean1"></bean>
    3 <!-- 指定要创建的bean
    4     factory-bean:指定实例工厂类,
    5     factory-method:工厂的创建bean的方法
    6  -->
    7 <bean id="user" factory-bean="factoryBean" factory-method="createUser"></bean>

    4、延迟加载

    在默认情况下,所有的bean都不是延迟加载的,在spring容器创建的时候把bean创建出来,所有getBean可以直接取出。。 可通过lazy-init来控制,默认是false, 如果设置为true,则在getBean时,才创建bean

    5、bean的作用域

    scope:singleton单例的: 可以设置延迟加载 和 非延迟加载

    scope:prototype多例的:只能延迟加载

    6、bean的生命周期

    与容器一致,容器销毁即销毁

    7、依赖注入:

      (1)、常量注入

    1 <bean id="person" class="com.tx.model.Person"  >
    2     <!-- 常量注入 -->
    3     <property name="id" value="1"></property>
    4     <property name="name" value="张三"></property>
    5 </bean>

      (2)、构造器注入

     1 <bean id="user" class="com.rl.spring.model.User">
     2     <!-- 
     3         index:构造方法的参数的索引顺序
     4         type:构造方法的参数的类型(不是必须 的)
     5         value:值
     6      -->
     7     <!-- <constructor-arg index="0" type="java.lang.Integer" value="2"/>
     8     <constructor-arg index="1" type="java.lang.String" value="张三"/>
     9     <constructor-arg index="2" type="java.lang.String" value="666"/> -->
    10     <constructor-arg index="0"  value="2"/>
    11     <constructor-arg index="1"  value="张三"/>
    12     <constructor-arg index="2"  value="666"/>
    13 </bean>

      (3)、外部bean注入,必须提供set方法

    1 <bean id="userDao" class="com.tx.spring.dao.impl.UserDaoImpl">
    2     <property name="dataSource" ref="dataSource"></property>
    3 </bean>
    4 <bean id="userService" class="com.tx.spring.service.impl.UserServiceImpl">
    5 <property name="userDao" ref="userDao"></property>
    6 </bean>

      (4)、内部bean注入,必须提供set方法

      (5)、集合注入,必须提供set方法

     1 <bean id="ci" class="com.rl.spring.model.CollectionInjection">
     2         <property name="set">
     3             <set>
     4                 <value>football</value>
     5                 <value>basketball</value>
     6             </set>
     7         </property>
     8         <property name="list">
     9             <list>
    10                 <value>male</value>
    11                 <value>female</value>
    12             </list>
    13         </property>
    14         <property name="map">
    15             <map>
    16                 <entry key="key1" value="value1"></entry>
    17                 <entry key="key2" value="value2"></entry>
    18             </map>
    19         </property>
    20         <property name="prop">
    21             <props>
    22                 <prop key="name">张三</prop>
    23                 <prop key="job">程序员</prop>
    24             </props>
    25         </property>
    26     </bean>

    8、注解方式注入

      (1)、引包:annocation包,如果4.2还需要引入aop包

      (2)、引入约束文件spring-context-4.2.xsd

      (3)、开启注解驱动

    <!-- 开启注解的驱动 -->
    <context:annotation-config/>

      @Resource注解:  放在属性上,也可以放在set方法上。  不需要提供set方法。  默认先根据名称找,如果没有按照接口与实现类的关系找,如果有多个实现类需要指定name

      @Autowired注解:放在属性上,也可放在set方法上,根据接口与实现类的关系找,如果多个实现类需要配合 @Qulifier的注解指定value

    9、Spring扫描器注解  

      @Controller:控制层的类

      @Service:服务层的类

      @Repository:数据层的类

      @Component:无法分层的类上

      

  • 相关阅读:
    在Asp.Net中使用jQueryEasyUI(转)
    easyui简单使用
    0mq 入门 (转)
    windows钩子(转)
    Windbg简明教程(转)
    复合文档学习笔记 (转)
    解析eml文件
    强制windows系统重启at命令
    pygame 入门实例
    python 回溯法 子集树模板 系列 —— 18、马踏棋盘
  • 原文地址:https://www.cnblogs.com/cat-fish6/p/8698442.html
Copyright © 2020-2023  润新知