Spring(三)补充

一 依赖注入的3种方式

1.set注入

   class UserService { 
         private UserDao userDao; 
         
         public void setUserDao(UserDao userDao){
             this.userDao = userDao;
         } 
     }


配置文件
 <bean name="userService " class="UserService">  
        <!依赖注入,配置当前类中相应的属性-->  
        <property name="userDao" ref="userDao"></property>  
 </bean>  
 <bean id="userDao" class="UserDao"></bean>

 

2.构造器注入

class UserService {
    private UserDao userDao;

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }
}

<bean name="userService " class="UserService"> 
    <constructor-arg ref="userDao"></constructor-arg>  
 </bean>  
 <bean id="userDao" class="UserDao"></bean>
3.注解注入
class UserService {

    @Autowire
    private UserDao userDao;

}

<bean name="userService " class="UserService"></bean>  
<bean id="userDao" class="UserDao"></bean>

也可以不用配置<bean></bean>,用以下四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:

  1. @Component:可以用于注册所有bean
  2. @Repository:主要用于注册dao层的bean
  3. @Controller:主要用于注册控制层的bean
  4. @Service:主要用于注册服务层的bean
  • @Resource:java的注解,默认以byName的方式去匹配与属性名相同的bean的id,如果没有找到就会以byType的方式查找,如果byType查找到多个的话,使用@Qualifier注解(spring注解)指定某个具体名称的bean。

          @Resource
          @Qualifier("userDaoMyBatis")
          private UserDao userDao;

  • @Autowired:spring注解,默认以byType的方式去匹配与属性名相同的bean的id

     @Autowired
        private UserDao userDao;

二 循环依赖

循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA,则它们最终反映为一个环。

构造器循环依赖:表示通过构造器注入构成的循环依赖,此依赖是无法解决的,只能抛BeanCurrentlyInCreationException异常表示循环依赖。

setter循环依赖:表示通过setter注入方式构成的循环依赖。对于setter注入造成的依赖是通过Spring容器提前暴露刚完成构造器注入但未完成其他步骤(如setter注入)的Bean来完成的,而且只能解决单例作用域的Bean循环依赖。

为了避免循环依赖最好用什么注入(接口注入)

转载:https://jinnianshilongnian.iteye.com/blog/1415278

三 构造函数注入能不能和设值注入一块用?

不能,有优先级问题。

使用构造函数依赖注入时,Spring保证一个对象所有依赖的对象先实例化后,才实例化这个对象。使用set方法依赖注入时,Spring首先实例化对象,然后才实例化所有依赖的对象。

 

四 BeanFactory和ApplicationContext有什么区别?

BeanFactory 可以理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。

BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。

从表面上看,application context如同bean factory一样具有bean定义、bean关联关系的设置,根据请求分发bean的功能。但application context在此基础上还提供了其他的功能。

  1. 提供了支持国际化的文本消息
  2. 统一的资源文件读取方式
  3. 已在监听器中注册的bean的事件

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值