Spring框架核心概念(一)

一、实例化Bean的方式

  1、通过构造函数实例化:通过这种方法,配置文件写法如下

1 <bean id="exampleBean" class="com.mazhuo.ExampleBean">
2 </bean>

  2、使用静态工厂方法实例化

    当使用此方法时,除了要设置class的值,还需要设置factory-method属性来指定创建Bean实例的方法。配置文件写法如下:

1 <bean id="exampleBean" class="com.mazhuo.ExampleBean" factory-methord="creatBean">
2 </bean>

    对应的类应用如下方式定义:

1 public class ExampleBean{
2     private static ExampleBean exampleBean = new ExampleBean();
3     private ExampleBean(){}
4     public static ExampleBean creatBean(){
5          return exampleBean;  
6     }
7 }

  3、使用工厂实例方法实例化

    此方法与第2个方法类似,使用这种方法时,class属性设置为空,而factory-method属性的值必须指定当前(或其祖先)容器中包含工厂方法的bean名称,而该工厂bean的工厂方法本身必须通过factory-method属性来指定。其中,一个工厂类中可以有多个工厂方法。配置文件写法如下:

1 <!-- 工厂Bean,包含creatBean()方法 -->
2 <bean id="serviceLocator" class="com.mazhuo.ServiceLocator">
3         <!-- 其他依赖项的注入 -->
4 </bean>
5 
6 <!-- 通过工厂Bean创建Bean -->
7 <bean id="clientService" factory-bean="serviceLocator" factory-methord="creatBean">
8 </bean>

      以上配置文件中的类的定义:

1 public class ServiceLocator {
2     private static ClientService clientService = new ClientService();
3     private ServiceLocator(){}
4     public ClientService creatBean() {
5         return clientService;
6     }
7 }

二、Bean注入方式

  1、基于构造函数:

    通过调用具有多个参数的构造函数的容器来完成的,每个参数标识依赖关系,这与调用静态工厂方法来构造bean几乎是等效的。

1 public class SimpleMovieLister {
2     //SimpleMovieLister依赖于MovieFinder
3     private MovieFinder movieFinder;
4     //Spring容器可以通过构造函数注入MovieFinder
5     public SimpleMovieLister(MovieFinder movieFinder) {
6         this.movieFinder = movieFinder;
7     }
8 }

       在上述代码中,配置文件中需要使用<constructor-arg>元素来指定构造函数参数或者索引类型。

    开发者也可以通过参数的名称来去除二义性,但需要注意的是,用这种方法工作的代码必须启用调试标记编译,开发者也可以使用@ConstructorProperties标注来显示声明构造函数的名称。参考代码如下

1 public class ExampleBean {
2     private int year;
3     private String name;
4     @ConstructorProperties({"year","name"})
5     public ExampleBean(int year, String name){
6         this.name = name;
7         this.year = year;
8     }
9 }

  2、基于setter方法:

    通过调用无参数构造函数或无参数静态工厂方法来实例化bean后,通过调用setter方法完成的。

三、自动装配

  1、@configuration:

    用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义。

    注意:@Configuration注解的配置类有如下要求:@Configuration不可以是final类型;@Configuration不可以是匿名类;嵌套的configuration必须是静态类。

  2、@Bean注解注册bean,同时可以指定初始化和销毁方法

     @Bean(name="testBean",initMethod="start",destroyMethod="cleanUp")

  3、spring中bean的scope属性,有如下5种类型:

             singleton表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例。
           prototype表示每次获得bean都会生成一个新的对象。
       request表示在一次http请求内有效(只适用于web应用)。
       session表示在一个用户会话内有效(只适用于web应用)。
       globalSession表示在全局会话内有效(只适用于web应用)。

  4、@Configuation等价于<Beans></Beans>

     @Bean等价于<Bean></Bean>

    @ComponentScan等价于<context:component-scan base-package="com.dxz.demo"/>

猜你喜欢

转载自www.cnblogs.com/ma-zhuo/p/11065753.html