Spring DI依赖注入

一、关于Spring依赖注入的四个注释

     1、@Service   一般给业务逻辑层加此注释

     2、@Controller  一般给控制器层加此注释

     3、@Repository  一般给数据库层即持久化层或Dao层加此注释

     4、@Component  一般给不属于以上几层的加此注释

任何一个类上标上注解都能快速的将bean加入到容器中。

二、将组件加入到容器中的具体步骤
    1、给需要添加的组件表上四个注解中的一个
    2、依赖context名称空间,自动扫描加了注解的组件
             context:component-scan :自动扫描组件
               base-package:指定要扫描的基础包,把基础包下所有加了注解的类加入到容器中
    3、使用注解一定要导入aop包,支持注解模式
          加了注解的类,它的id默认为类名第一个字母小写如:类名:BookDao id:bookDao
             作用域默认同样为单实例
             在组件上可以通过添加@Scope(value="prototype")来改变组件为多实例
             直接在四个注解的后面也可以自定义id  例如:@Service("bookSearch")

三、关于context名称空间的一些注意事项

exclude-filter :扫描时过滤一些不要的组件
           include-filter :只扫描哪些要的组件,默认全部扫描进来
            一定要禁用默认扫描规则,在componet-scan中使用use-default-filters="false"属性
           type="annotation" 就是指定过滤规则,指按照注解 进行排除,在expression="注解的全类名"  在这里
           规定哪些注解不扫描
           type="assignable" 指定排除某个具体的类,按照类过滤,在expression="类的全类名"  
            后三种很少很少用到,了解就行,前两种要掌握
            type="aspectj" 后来的aspectj表达式
            type="custom" 自定义一个TypeFilter,自己写代码规定哪些使用
            type="regex" 使用正则表达式


	 <context:component-scan base-package="com.feilonkji">
	 	<!-- 指过滤掉注解为@Repository的组件 -->
	     <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>      
	 </context:component-scan>

四、关于使用@Autowired自动装配注解的装配流程原理

 使用@Autowired注解自动赋值
           例如:
            @Autowired
            private BookService bookService;
          1、先按照类型到容器中找到对应组件即:bookService = ioc.getBean(BookService.class);
                1、找到就赋值
                2、未找到就抛出异常
                3、找到多个类型,即可能有子类或者父类
                             会继续按照变量名作为id继续匹配 例如:BookService变量名的id:bookService
                             1、找到就装配上        
                             2、如果id还找不到,抛出异常        
             可以使用注解@Qualifier("id名");指定id名配置
             可以使用@Autowired(required=false),指如果找不到对应的实例,就装配null,不再报异常
              如果@Autowired使用在方法上,则方法上的参数都会自动注入值,同时方法在bean创建的时候自动运行
              自动装配的注解:@Autowired @Resource @Inject  这三个注解都可以自动装配
              @Autowired 最强大,是Spring中的注解
              @Resource 是j2ee java的标准
              区别:@Resource:扩展性很强,是java的标准,如果切换成另外一个容器框架@Resource可以继续使用,@Autowired不行
      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值