bean 里边的注解
来源:互联网 发布:python建立socket连接 编辑:程序博客网 时间:2024/04/30 00:24
可在Java代码中使用@Resource或者@Autowired注解进行装配,但需在XML中配置以下信息
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
然后显式的配置<context:annotation-config/>
该配置隐式注册了多个对注解进行解析的处理器,如下列举
AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor RequiredAnnotationBeanPostProcessor
因为@Autowired注解是Spring提供的,而@Resource注解是J2EE提供的
在JDK6中就已经包含@Resource注解了,所以它没有跟Spring紧密耦合
并且在使用Spring时,若使用了JSR-250中的注解,如@Resource//@PostConstruct//@PreDestroy
那么还需要Spring安装目录中的SPRING_HOME\\lib\\j2ee\\common-annotations.jar包的支持
这里面的@Resource注解就是在SPRING_HOME\\lib\\j2ee\\common-annotations.jar中的
@Resource注解
@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上
@Resource默认按名称装配,名称可以通过name属性指定。当找不到与名称匹配的bean时,才会按类型装配
若注解标注在字段上且未指定name属性,则默认取字段名作为bean名称寻找依赖对象
若注解标注在setter上且未指定name属性,则默认取属性名作为bean名称寻找依赖对象
如果没有指定name属性,并且按照默认的名称仍找不到依赖对象时,它就会按类型匹配
但只要指定了name属性,就只能按名称装配了
@Autowired注解
@Autowired默认是按类型装配对象的,默认情况下它要求依赖对象必须存在
如果允许null值,可以设置它的required属性为FALSE,如@Autowired(required=false)
若想要按名称装配,可以结合@Qualifier注解一起使用,如@Autowired(required=false) @Qualifier("personDaoBean")
3、若想让<bean>实例化之后去执行初始化方法,可以使用@PostConstruct标注在方法上
4、同样@PreDestroy注解标注在方法上,可以用来指定<bean>销毁时执行的方法
这里的@PostConstruct是EJB3里面用来初始化bean的注解,它也不是Spring中的注解
并且<context:component-scan base-package=""/>的背后注册了很多用于解析注解的处理器
其中就包括了<context:annotation-config/>配置项里面的注解所使用的处理器
所以配置了<context:component-scan base-package="">之后,便无需再配置<context:annotation-config>
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
然后显式的配置<context:annotation-config/>
该配置隐式注册了多个对注解进行解析的处理器,如下列举
AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor RequiredAnnotationBeanPostProcessor
其实,注解本身做不了任何事情,和XML一样,只起到配置的作用,主要在于背后强大的处理器
@Autowired是Spring提供的一种注入Bean的方法。具体的应用是: 1)在Service类中定义的注入属性前加@Autowired。例如:@Autowired private PersonDAO personDAO, 2)必须有个set方法,例如:@Autowired public void setPersonDAO(PersonDAO personDAO) { System.out.println("********** @Autowired注入Bean *************"); this.personDAO = personDAO; }Spring配置文件的配置内容:1) 头部 (加入)xmlns:context="http://www.springframework.org/schema/context" (添加)xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" 2) <context:annotation-config/> <bean id="personDAO" class="edu.syict.dao.impl.PersonDAOImpl"/> <bean id="personService" class="edu.syict.service.impl.PersonServiceImpl"/>
这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。<bean id="userDao" class="..."/><bean id="userService" class="..."> <property name="userDao"> <ref bean="userDao"/> </property></bean>这样你在userService里面要做一个userDao的setter/getter方法。但如果你用了@Autowired的话,你只需要在UserService的实现类中声明即可。@Autowiredprivate IUserDao userdao;另外,比较建议使用@Resource注解,而不要使用@Autowired注解@SuppressWarnings压制警告,即去除警告 rawtypes是说传参时也要传递带泛型的参数J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。 @SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。取消警告表示,在编译.java文件的时候,不在出现一些警告 ,如变量没有用到,会有提示警告,用@SuppressWarnings("unused")之后 ,警告消失。
因为@Autowired注解是Spring提供的,而@Resource注解是J2EE提供的
在JDK6中就已经包含@Resource注解了,所以它没有跟Spring紧密耦合
并且在使用Spring时,若使用了JSR-250中的注解,如@Resource//@PostConstruct//@PreDestroy
那么还需要Spring安装目录中的SPRING_HOME\\lib\\j2ee\\common-annotations.jar包的支持
这里面的@Resource注解就是在SPRING_HOME\\lib\\j2ee\\common-annotations.jar中的
@Resource注解
@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上
@Resource默认按名称装配,名称可以通过name属性指定。当找不到与名称匹配的bean时,才会按类型装配
若注解标注在字段上且未指定name属性,则默认取字段名作为bean名称寻找依赖对象
若注解标注在setter上且未指定name属性,则默认取属性名作为bean名称寻找依赖对象
如果没有指定name属性,并且按照默认的名称仍找不到依赖对象时,它就会按类型匹配
但只要指定了name属性,就只能按名称装配了
@Autowired注解
@Autowired默认是按类型装配对象的,默认情况下它要求依赖对象必须存在
如果允许null值,可以设置它的required属性为FALSE,如@Autowired(required=false)
若想要按名称装配,可以结合@Qualifier注解一起使用,如@Autowired(required=false) @Qualifier("personDaoBean")
另外
在一个稍大的项目中通常会有上百个组件,如果都使用XML的bean定义来配置组件的话
显然会增加配置文件的体积,查找及维护也不方便
而Spring2.5就为我们引入了组件自动扫描机制
它可以在classpath下寻找标注了@Service、@Repository、@Controller、@Component注解的类
并把这些类纳入Spring容器中管理,它的作用和在XML中使用bean节点配置组件是一样的
使用自动扫描机制,则需配置<context:component-scan base-package="com.jadyer"/>启动自动扫描
其中base-package指定需要扫描的包,它会扫描指定包中的类和子包里面类
@Service用于标注业务层组件
@Repository用于标注数据访问组件,即DAO组件
@Controller用于标注控制层组件,如Struts中的Action
@Component泛指组件,当组件不要好归类时,可以使用这个注解进行标注
1、可以使用诸如@Service("personDao")修改bean名称,而它默认的是将首字母小写的类名作为<bean>名称,
之后就可以和在配置文件中声明的Bean一样使用了。
2、若要更改<bean>作用域的话,可以使用@Scope("prototype")注解来修改<bean>作用域 3、若想让<bean>实例化之后去执行初始化方法,可以使用@PostConstruct标注在方法上
4、同样@PreDestroy注解标注在方法上,可以用来指定<bean>销毁时执行的方法
这里的@PostConstruct是EJB3里面用来初始化bean的注解,它也不是Spring中的注解
并且<context:component-scan base-package=""/>的背后注册了很多用于解析注解的处理器
其中就包括了<context:annotation-config/>配置项里面的注解所使用的处理器
所以配置了<context:component-scan base-package="">之后,便无需再配置<context:annotation-config>
- bean 里边的注解
- Bean 基于注解的配置
- Spring 注解 bean的生命周期
- spring bean的注解开发
- Spring的bean管理(注解)
- Spring的@Bean注解使用
- sln里边的内容
- Spring注解的默认 bean 的 id
- Spring IOC--Bean的装配(使用注解定义Bean)
- Spring4----使用注解方式配置bean和bean的属性
- Spring IOC--Bean的装配(使用注解定义Bean)
- Spring-基于注解的配置[01定义Bean+扫描Bean]
- Spring应用中常见的bean注解
- 使用Spring注解完成Bean的定义
- 代码获取Spring注解的bean
- 代码获取Spring注解的bean!!
- 使用Spring注解完成Bean的定义
- 自定义Spring注解bean的命名策略
- Android测试教程(5):第一个测试项目HelloWorldTest
- Windows作为OpenVPN的客户端
- iOS学习之WebView的使用
- ios 应用使用向导
- Android测试教程(6):测试Activity
- bean 里边的注解
- My frist article
- Twitter Storm源代码分析之DRPC架构细节
- Android测试教程(7):测试Content Provider
- velocity.properties 配置说明
- Android测试教程(8):测试Service
- 网络流与线性规划24题05圆桌问题
- Android测试教程(9):ApplicationTestCase示例
- COM和套间(Apartments) 1 - 基本知识