关于IoC的 注入 与 装配

来源:互联网 发布:淘宝号出租平台 编辑:程序博客网 时间:2024/05/17 04:13

文章1:详解依赖注入与自动装配

文章2:详解 Spring 3.0 基于 Annotation 的依赖注入实现

观点: 注入与装配是不同的两个过程.

        ( bean = 实例化 + 装配 )


一. 实例化:(有4种方式 构造器实例化,静态工厂实例化,实例工厂实例化,注解自动实例化)

(1) 实例化的是bean实体类. 笨重的方法就是用bean节点在xml中来注入咯,而精简的方式便是注解咯.

     (下面就是注解的方式,注解后,在xml中扫描即可).

  • @Repository (标识dao-Impl),
  • @Service (标识service),
  • @Controller (标识servlet或叫controller或action)
  • @Component (标识model)    <作用不明确,定义bean,当不好归类时,可用此注解>
  • (注:自动扫描默认命名为类名首字母小写; 若带有name属性(例: @Controller(name="userAdd")),将使用该指定名).

(2) 那么为了把这么些个实体类扔进Ioc容器中 (这里要说,所谓的自动化智能都是假的,皆需人为),怎么整?

通过注解已经做好标记,便只需在applicationContext.xml中配个注解来主动扫描查找咯

<!-- 要先引入这个配置 -->

....

http://www.springframework.org/schema/context/spring-context-4.2.xsd

...

<beans ... >

    ....

    <context:component-scan base-package="com.study.niubai">

    <!-- 根包名(可多个用','隔开),默认将扫描其下及其子包的这些注解 -->

           <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  

           <!-- 标识要扫面的注解.(若自动扫描未关闭,此节点无用) -->

           <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  

           <!-- 标识不扫描的注解 -->

    </context:component-scan>

    ....

</beans>


文章:Spring自动扫描装配Bean常用注解

二. 装配:(有3种方式 set装配,构造装配,注解自动装配)

(3) 既已注入实体类,必然就需要装配各种属性,方法啥的. 怎么装配呢?

这就用到常讲的set注入,构造注入,工厂注入.实则就是装配的不同罢了.也有注解自动装配.

 (下面用的注解自动装配)

  • @Autowired有五种模式 默认按类型匹配.  可写在成员属性set()方法上.

           属性:(required="true")  //一定要找到对应的bean,否则抛异常;默认值true.

  • @Qualifier("bean的名字")  //与@Autowired连用. 解决按类型多匹配的异常问题.

                    例: @Autowired

                         @Qualifier("bean的名字")

  • @Resource   //默认按名称匹配. 当找不到名称时,再按类型匹配. JSR-330提供. 可写在成员属性set()方法上.

           属性:(name="注入的名称").   //若无name,则默认使用变量名;一般不写.

            (注:按@Resource(name="beanName")注入,若无匹配bean,则不再按类型装配.)

  • @Inject   //(不用). 按类型装配.  功能比@Autowired少. JSR-330提供.

推文1:Spring容器中bean的作用域

作用域:

(有5种 看推文1,不赘述)

对于bean,在上面已经注入,也装配好了. 那么它该用在那里?

@Scope("prototype")   //默认为singleton.

   


其他的注解也在此学习一下:

@PostConstruct      //等价init-method. bean初始化时执行.  使用在方法上.

@PreDestroy     //等价destroy-method. bean销毁时执行.  使用在方法上.


原创粉丝点击