zoukankan      html  css  js  c++  java
  • SpringIOC中的注解配置


    Spring中的注解是个好东西,可以简化我们的操作,但是使用了注解又会在一定的程度上增加程序的耦合度,xml中的配置写在了类中
    虽然简化了开发过程,但是或多或少的违背了开闭原则。所以在开发过程中要先明确,那些配置是要经常改动的,那些配置是不会经常改动的。

    ioc中的annotation配置

    @Autowired(自动注入byType→byName)
    1) @Autowired使用后需要在xml文件加入以下配置才能生效: <context:annotation-config/>

    2) @Autowired注解可以写在成员变量、setter方法、构造器函数上面

    3) @Autowired默认按照byType匹配的方式进行注入,如果没有一个bean的类型是匹配的则会抛异常,如果有多个bean的类型都匹配成功了,那么再按byName方式进行选择

    4) @Autowired如果最终匹配不成功(注意一定是一个都没有找到的情况)则会抛出异常,但是如果设置为 @Autowired(required=false),则最终匹配不成功没有不会抛出异常。

    5) @Autowired可以结合@Qualifier("beanName")来使用,则可以达到byName的效果

    @Resource(自动注入byName→byType)
    1) @Resource使用后需要在xml文件加入以下配置才能生效:<context:annotation-config/>

    2) @Resource的作用和@Autowired差不多,只不过 @Resource是默认先用byName,如果找不到合适的就再用byType来注入

    3) @Resource有俩个属性,name和type,使用name属性则表示要byName匹配,使用type属性则表示要byType匹配


    @PostConstruct和@PreDestroy
    1) 标注了@PostConstruct注解的方法将在类实例化后调用
    2) 标注了@PreDestroy注解的方法将在类销毁之前调用

    @Component
    1) @Component注解可以直接定义bean,而无需在xml定义。但是若两种定义同时存在,xml中的定义会覆盖类中注解的Bean定义

    2) @Component注解直接写在类上面即可

    3) @Component有一个可选的参数,用于指定bean的名称
    @Component("boss")
    public class Boss{}

    4) @Component如果不指定参数,则bean的名称为当前类的类名小写
    //和上面例子的相关相同
    @Component
    public class Boss{}

    5) @Component使用之后需要在xml文件配置一个标签
    <context:component-scan/>

    6) <context:component-scan base-package="com.briup.ioc.annotation" />
    表示spring检查指定包下的java类,看它们是否使用了 @Component注解

    7) @Component定义的bean默认情况下都是单例模式的,如果要让这个bean变为非单例,可以再结合这个@Scope注解来达到目标@Scope("prototype")


    @Component是Spring中所有bean组件的通用形式, @Repository @Service @Controller 则是 @Component的细化
    用来表示更具体的用例,分别对应了持久化层、服务层和表现层。
    但是至少到现在为止这个四种注解的实质区别很小(甚至几乎没有),都是把当前类注册为spring容器中的一个bean


    注意:
    1.component-scan标签默认情况下自动扫描指定路径下的包(含所有子包)

    2.component-scan标签将带有@Component @Repository @Service @Controller注解的类自动注册到spring容器中

    3.component-scan标签对标记了
    @Required @Autowired @PostConstruct @PreDestroy @Resource @WebServiceRef @EJB
    @PersistenceContext @PersistenceUnit
    等注解的类进行对应的操作,将这些类都作为Component进行注册

    4.component-scan标签包含了annotation-config标签的作用

    5.使用注解后注意:生成的对象中的基本类型的属性没有初始化值

     

  • 相关阅读:
    Lesson 43-44 Vacation Season is Approaching?
    Lesson 41-42 How would you respond?
    Lesson 37-38 Do you want to be a millionaire?
    Lesson 35-36 What did you forget?
    Lesson 33-34 Dieting
    保送
    陈老师搬书
    水题(原 USACO Mother's Milk)
    最大公约数和最小公倍数问题(luogu 1029)
    最大子矩阵(OJ 1768)
  • 原文地址:https://www.cnblogs.com/Magic-Li/p/11770215.html
Copyright © 2011-2022 走看看