欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringIOC中的注解配置

程序员文章站 2022-06-07 11:01:41
Spring中的注解是个好东西,可以简化我们的操作,但是使用了注解又会在一定的程度上增加程序的耦合度,xml中的配置写在了类中虽然简化了开发过程,但是或多或少的违背了开闭原则。所以在开发过程中要先明确,那些配置是要经常改动的,那些配置是不会经常改动的。 ioc中的annotation配置 @Auto ......


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