学习spring的过程中,我发现我对spring的认识还是只停留在2.x时代,并没有多少用java配置的方式去配置读取配置文件,而是一股脑的用xml,这种方法并不是spring想要推崇的,这里记录一下java方式配置spring配置文件:
1Spring的发展
1.1.Spring1.x 时代
在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。
1.2.Spring2.x时代
随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。
那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践:
1、应用的基本配置用xml,比如:数据源、资源文件等;
2、业务开发用注解,比如:Service中注入bean等;
1.3.Spring3.x到Spring4.x
从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。
3.Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。
3.1.@Configuration 和 @Bean
Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:
1、@Configuration 作用于类上,相当于一个xml配置文件;
2、@Bean 作用于方法上,相当于xml配置中的<bean>;
2.1.创建工程以及导入依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast.springboot</groupId>
<artifactId>itcast-springboot</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp-spring</artifactId>
<version>0.8.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.1. 编写User对象
**public** **class** User {
**private**String username;
**private**String password;
**private**Integer age;
**public** String getUsername() {
**return** username;
}
**public** **void**setUsername(String username) {
**this**.username= username;
}
**public** String getPassword() {
**return** password;
}
**public** **void**setPassword(String password) {
**this**.password= password;
}
**public** Integer getAge() {
**return** age;
}
**public** **void**setAge(Integer age) {
**this**.age= age;
}
}
1.1.2. 编写UserDAO 用于模拟与数据库的交互
**public** **class** UserDAO {
**public** List<User> queryUserList(){
List<User> result= **new** ArrayList<User>();
// 模拟数据库的查询
**for** (**int** i= 0; i< 10; i++) {
User user= **new** User();
user.setUsername("username_"+ i);
user.setPassword("password_"+ i);
user.setAge(i + 1);
result.add(user);
}
**return** result;
}
}
1.1.3. 编写UserService****用于实现User数据操作业务逻辑
@Service
**public** **class** UserService {
@Autowired // 注入Spring容器中的bean对象
**private**UserDAO userDAO;
**public** List<User> queryUserList() {
// 调用userDAO中的方法进行查询
**return** **this**.userDAO.queryUserList();
}
}
1.1.4. 编写SpringConfig****用于实例化Spring容器
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个<u>xml</u>文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
**public** **class** SpringConfig {
@Bean // 通过该注解来表明是一个Bean对象,相当于<u>xml</u>中的<bean>
**public** UserDAO getUserDAO(){
**return** **new**UserDAO(); // 直接new对象做演示
}
}
1.1.5. 编写测试方法 用于启动Spring容器
**public** **class** Main {
**public** **static** **void**main(String[] args) {
// 通过Java配置来实例化Spring容器
AnnotationConfigApplicationContext <u>context</u>= **new** AnnotationConfigApplicationContext(SpringConfig.**class**);
// 在Spring容器中获取Bean对象
UserService userService= context.getBean(UserService.**class**);
// 调用对象中的方法
List<User> list= userService.queryUserList();
**for**(User user: list) {
System.***out***.println(user.getUsername() + ", "+ user.getPassword() + ", "+ user.getPassword());
}
// 销毁该容器
context.destroy();
}
}
1.1.6. 测试效果
1.1.7. 小结
从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。