SpringIOC中的注解配置


Spring中的注解是个好东西,能够简化咱们的操做,可是使用了注解又会在必定的程度上增长程序的耦合度,xml中的配置写在了类中
虽然简化了开发过程,可是或多或少的违背了开闭原则。因此在开发过程当中要先明确,那些配置是要常常改动的,那些配置是不会常常改动的。java

ioc中的annotation配置spring

@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的效果ui

 

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

2) @Resource的做用和@Autowired差很少,只不过 @Resource是默认先用byName,若是找不到合适的就再用byType来注入prototype

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


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

 

@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.使用注解后注意:生成的对象中的基本类型的属性没有初始化值

相关文章
相关标签/搜索