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指定延迟初始化。

  • 相关阅读:
    mac os programming
    Rejecting Good Engineers?
    Do Undergrads in MIT Struggle to Obtain Good Grades?
    Go to industry?
    LaTex Tricks
    Convert jupyter notebooks to python files
    How to get gradients with respect to the inputs in pytorch
    Uninstall cuda 9.1 and install cuda 8.0
    How to edit codes on the server which runs jupyter notebook using your pc's bwroser
    Leetcode No.94 Binary Tree Inorder Traversal二叉树中序遍历(c++实现)
  • 原文地址:https://www.cnblogs.com/guuyoog/p/11772123.html
Copyright © 2011-2022 走看看