zoukankan      html  css  js  c++  java
  • spring bean

    什么是Bean?

    被spring容器管理的java实例化对象

    怎么配置?

    spring3.x提供了三种配置方式

    一、基于XML配置

    <bean id=“loginUserDao” class=“com.chinalife.dao.impl.LoginUserDaoImpl”  
            lazy-init=“true” init-method=“myInit” destroy-method=“myDestroy”  
            scope=“prototype”>  
            ……   
    </bean>

    在XML配置中,通过<bean></bean>来定义bean,通过id或name属性定义bean的名称,如果未指定id和name,则自动将类名作为bean的名称。通过<property>子元素或者p命名空间的动态属性为bean注入值。还可以通过<bean>的init-method属性指定bean实现类的方法名来设置生命过程方法(最多指定一个初始化方法和销毁方法)。通过<bean>的scope指定bean的作用范围。通过lazy-init属性指定是否延迟初始化。

    当bean的实现类来源于第三方类库,比如DataSource、Hibernate Template等,无法在类中标注注解信息时,只能通过XML进行配置,而且命名空间的配置,比如aop、context等,也只能采用基于XML的配置。

    二、基于注解的配置

    @Scope(“prototype”)   
    @Lazy(true)   
    @Component(“loginUserDao”)   
    public class LoginUserDao {   
        ……   
        // 用于设置初始化方法   
        @PostConstruct  
        public void myInit() {   
      
        }   
      
        // 用于设置销毁方法   
        @PreDestroy  
        public void myDestroy() {   
        }   
    } 

    在bean实现类中通过一些Annotation来标注bean类:

    @Component:标注一个普通的spring bean类(可以指定bean名称,未指定时默认为小写字母开头的类名)

    @Controller:标注一个控制器类

    @Service:标注一个业务逻辑类

    @Repository:标注一个DAO类

    通过在成员变量或者方法入参处标注@Autowired按类型匹配注入(byType注入,@Resource按byName注入),也可以使用@Qualififier按名称配置注入。通过在方法上标注@PostConstrut和@PreDestroy注解指定的初始化方法和销毁方法(可以定义任意多个)。通过@Scope("prototype")指定bean的作用范围。通过在类定义处标注@Lazy(true)指定bean的延迟加载。

    @Autowired 与@Resource的区别:

    1、@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入

    2、@Resource默认通过名称注入,如名称无找到则通过类型注入,由jdk提供

    3、@AutoWired默认通过类型注入,如存在多个类型则通过名称注入,由spring提供(可以配合@Qualifier("")实现类指定注入

     三、基于Java类配置

    @Configuration  
    public class Conf {   
        @Scope(“prototype”)   
        @Bean(“loginUserDao”)   
        public LoginUserDao loginUserDao() {   
            return new LoginUserDao();   
        }   
    } 

    在标注了@Configuration的java类中,通过在类方法标注@Bean定义一个bean。方法必须提供bean的实例化逻辑。通过@Bean的name属性可以定义bean的名称,未指定时默认名称为方法名。在方法处通过@Autowired使方法入参绑定bean,然后在方法中通过 代码进行注入;也可以调用配置 类的@Bean方法进行注入。通过@Bean的initMethod或destroyMethod指定一个初始化或者销毁方法。通过@Scope指定bean的作用范围。@Lazy指定延迟初始化。

  • 相关阅读:
    [刷题] PTA 7-32 说反话-加强版
    [算法] 堆
    [笔记] 《c++ primer》显示器程序 Chapter7
    [笔记] 《c++ primer》书店程序 Chapter7
    [c++] <vector>
    [笔记] 《c++ primer》书店程序 Chapter2
    [笔记] 《c++ primer》书店程序 Chapter 1
    253. Meeting Rooms II
    461. Hamming Distance
    252. Meeting Rooms
  • 原文地址:https://www.cnblogs.com/guuyoog/p/11772123.html
Copyright © 2011-2022 走看看