Spring注解的基础用法
来源:互联网 发布:sql随机生成字符串 编辑:程序博客网 时间:2024/05/21 19:44
除了使用XML作为配置文件来管理Bean,Spring还支持使用注解来管理。由于Spring没有采用“约定优于配置”的策略,Spring依然要求显式指定搜索哪些路径下的Java类,Spring将会把适合的Java类全部注册成Spring Bean。问题是:Spring怎么知道该把哪些Java类当成Bean类处理呢?这就需要注解(Annotation)了。
下面使用一些定义一系列Java类:
com.zz.annotation.Person
@Scope("prototype")@Component("person_")public class Person { private Car car; public Car getCar() { return car; } @Resource(name="car") public void setCar(Car car) { this.car = car; } public void go() { car.run(); }}
com.zz.annotation.Car
@Componentpublic class Car { @PostConstruct public void init() { System.out.println("=== 生产新车 ==="); } public void run() { System.out.println("开车"); } @PreDestroy public void destory() { System.out.println("=== 回收车辆 ==="); }}
beans.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 自动扫描指定包及其子包下的所有Bean类 --> <context:component-scan base-package="com.zz.annotation" /></beans>
public class AnnotationTest { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // 获取Spring容器中所有的Bean实例的名称 System.out.println(java.util.Arrays.toString(ctx.getBeanDefinitionNames())); Person person = ctx.getBean("person_", Person.class); person.go(); }}
运行结果如下:
=== 生产新车 ===
[car, person_, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor, org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor]
开车
1. 用@Component表示Java Bean类
@Component写在类的定义上,表示这个类是普通的Java Bean类,里面可以指定生成的Bean的id(Person类指定成“person_”,Car类默认为“car”)。
另外,Spring提供了如下几个Annotation来标注Spring Bean:
- @Component:标注一个普通的Spring Bean类
- @Controller:标注一个控制器组件类
- @Service:标注一个业务逻辑组件类
- @Repository:标注一个DAO组件类
尽管现在没有太大区别,但是在Spring未来的版本中,@Controller、@Service、@Repository也许能携带更多语义,所以尽量考虑按实际标注而不是统一使用@Component。
2. 用@Resource配置依赖
@Resource中有一个name属性,表示需要注入的Bean实例的id,与<property…/>中的ref属性效果相同。
在本例中,person就是靠这个配置注入了一个Car类的实例,所以person.go()才能输出“开车”,否则会因为找不到car而报错。
3. 用@PostConstruct和@PreDestroy定制生命周期行为
@PostConstruct和@PreDestroy分别对应Bean的初始化方法和Bean销毁之前的方法,相当于<bean…/>中的init-method和destroy-method属性。
在本例中的效果是输出了“=== 生产新车 ===”这一行。本来期望中应该有“=== 回收车辆 ===”这么一行,但实际上由于不能确定Java虚拟机何时会回收这个实例,所以很难看见@PreDestroy对应方法的调用。
工具包
- spring-framework-4.0.4.RELEASE
- commons-logging-1.2.jar
参考书目
- 《轻量级JavaEE企业应用实战》李刚 编著
- Spring注解的基础用法
- spring(基础17) Spring的@Transactional注解详细用法
- spring的@Transactional注解用法
- Spring @Value注解的用法
- Spring自动装配的注解用法
- Spring @value注解的错误用法
- Spring 缓存注解@Cacheable的用法
- spring boot中的@RequestMapping注解的用法
- Spring 缓存注解@Cacheable的用法
- Spring 缓存注解@Cacheable的用法
- 浅谈Spring框架注解的用法分析
- spring的@Transactional注解详细用法
- spring的@Transactional注解详细用法
- spring的@Transactional注解详细用法
- @Query注解的用法(Spring Data JPA)
- spring的@Transactional注解详细用法
- Spring 缓存注解@Cacheable的用法
- 浅谈 Spring 框架注解的用法分析
- 十进制计数器的设计
- Java中特殊字符处理(转义字符)
- AsyncTask简介及使用
- Python3.4对Excel和Word的操作----win32com
- IAR EW6.30版本下建立STM32工程(芯片型号STM32F105VC)
- Spring注解的基础用法
- 计步器
- 基于PHPnow搭建Eclipse开发环境
- Docker学习笔记 — Coreos/Flannel
- spark primer 计算单源最短路径
- 我的知识树
- iOS -实现UIView圆角显示的方法
- 愿望思维
- Zookeeper学习7_Zookeeper节点的增加及故障演练