前言
在之前,我们都是使用xml进行Spring的配置。
该篇文章将使用Java注解的方式,实现Spring 的配置。
一、基于Java的容器配置
项目结构:
User 类
public class User {
}
AppConfig 类。注解:@Configuration、@ComponentScan、@Import
/**
* 注解 @Configuration 相当于:<beans></beans>
* 解释:@Configuration 就相当于我们之前定义的beans.xml。
* 注解 @ComponentScan(basePackages = "com.acme") 相当于:<context:component-scan base-package="com.shengjava"/>
* 解释:@ComponentScan 用于扫描
* 注解 @Import(SubAppConfig.class) 功能相当于:<import resource="beans.xml"/>,不过这里引入的是.class
*/
@Configuration
@ComponentScan(basePackages = "com.shengjava")
@Import(SubAppConfig.class)
public class AppConfig {
/**
* 注解 @Bean 相当于:<bean id="user" class="com.shengjava.pojo.User"></bean>
* 返回值:相当于bean标签中的class属性。
* 方法名:相当于bean标签中的id属性。
*/
@Bean
public User user() {
return new User();
}
}
SubAppConfig类。注解: @Configuration
/**
* @Configuration 就相当于我们之前定义的beans.xml。
*/
@Configuration
public class SubAppConfig {
}
AppConfigTest类。
注意:这里获取的不是之前用xml配置时的ClassPathXmlApplicationContext了,而是AnnotationConfigApplicationContext。
public class AppConfigTest {
public static void main(String[] args) {
// 获取注解配置容器(注意:这里获取的对象不是ClassPathXmlApplicationContext了!而是注解配置容器)
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 获取对象
User user = context.getBean("user", User.class);
System.out.println(user);
}
}
输出
com.shengjava.pojo.User@3270d194
二、注解总结
1.@Configuration
@Configuration 就类似于我们之前定义的beans.xml。
注解 @Configuration 相当于:。
2.@ComponentScan
@ComponentScan 用于扫描。
例如,注解 @ComponentScan(basePackages = “com.acme”) 相当于如下xml配置:
<context:component-scan base-package="com.shengjava"/>
3.@Import
这个注解用于引入其他的注解配置类。
例如,注解 @Import(SubAppConfig.class) 功能相当于如下xml配置:
<import resource="beans.xml"/>
4.@Bean
注解 @Bean 用于方法上,返回值:相当于bean标签中的class属性。方法名:相当于bean标签中的id属性。
例如,下面java:
/**
* 注解 @Bean 相当于:<bean id="user" class="com.shengjava.pojo.User"></bean>
* 返回值:相当于bean标签中的class属性。
* 方法名:相当于bean标签中的id属性。
*/
@Bean
public User user() {
return new User();
}
相当于xml配置:
<bean id="user" class="com.shengjava.pojo.User"></bean>
参考自:1.12. Java-based Container Configuration
三、扩展
@Resource、@PostConstruct 、@PreDestroy 这三个注解是JDK 6到8的标准Java库的一部分。但是,整个javax.annotation 包都与JDK 9中的核心Java模块分开,并最终在JDK 11中删除了。如果需要,需要对javax.annotation-api工件进行处理。现在可以通过Maven Central获得,只需像其他任何库一样将其添加到应用程序的类路径中即可。
上面这段话是说,如果你现在用的是JDK9及以上的JDK,你想使用@Resource注解,那你就要在maven引入如下依赖:
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
参考自:1.9.9. Using @PostConstruct and @PreDestroy
相关
我的该分类的其他相关文章,请点击:【Spring + Spring MVC + MyBatis】文章目录