Spring的Java配置方式
Java配置是Spring4.x推薦的配置方式,可以完全替代xml配置。
1 ? ? @Configuration 和 @Bean
Spring的Java配置方式是通過 @Configuration 和 @Bean 這兩個注解實現的:
1、@Configuration 作用于類上,相當于一個xml配置文件;
2、@Bean 作用于方法上,相當于xml配置中的<bean>;
?
2 示例
該示例演示了通過Java配置的方式進行配置Spring,并且實現了Spring IOC功能。
2.1 創建工程以及導入依賴(Maven)
<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.qiaoliqiang</groupId><artifactId>spring-boot</artifactId><version>0.0.1-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.2 ? 編寫User對象
package cn.qlq;public class User {private String username;private String password;private int 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 int getAge() {return age;}public void setAge(int age) {this.age = age;}}
2.3 ? 編寫UserDAO 用于模擬與數據庫的交互(注意此DAO沒有打注解)
package cn.qlq;import java.util.ArrayList; import java.util.List;/*** 模擬UserDao查詢數據庫* * @author liqiang**/ public class UserDao {/*** 模擬查到10個 用戶* * @return*/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;}}?
2.4 ? 編寫UserService 用于實現User數據操作業務邏輯(聲明service注解,且自動注入dao對象)
package cn.qlq;import java.util.List;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;//聲明是service層對象 @Service public class UserService {@Autowired // 自動注入Spring容器中的dao層對象(byType注入)private UserDao UserDao;public List<User> queryUserList() {// 調用userDAO中的方法進行查詢return this.UserDao.queryUserList();}}?
2.5 ? 編寫SpringConfig 用于實例化Spring容器
打上@Configuration注解,同時打上@ComponentScan配置掃描的包。
@Bean用于向容器中放入對象,如果在UserDao類前面打上@Repository注解就不用@Bean方式
package cn.qlq;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration;@Configuration // 通過該注解來表明該類是一個Spring的配置,相當于一個xml文件 @ComponentScan(basePackages = "cn.qlq") // 配置掃描包 public class SpringConfig {@Bean // 通過該注解來表明是一個Bean對象,相當于xml中的<bean>public UserDao getUserDAO() {return new UserDao(); // 直接new對象做演示 }}?
?注意:方法名是作為返回對象的名字的,因此一般不帶get,也就是上述放入spring容器的bean的name為getUserDAO
?
2.6 ? 編寫測試方法 用于啟動Spring容器
package cn.qlq;import java.util.List;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** 測試類* * @author liqiang**/ public class Test {public static void main(String[] args) {// 通過Java配置來實例化Spring容器AnnotationConfigApplicationContext context = 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();}}?
結果:
username_0, password_0, password_0 username_1, password_1, password_1 username_2, password_2, password_2 username_3, password_3, password_3 username_4, password_4, password_4 username_5, password_5, password_5 username_6, password_6, password_6 username_7, password_7, password_7 username_8, password_8, password_8 username_9, password_9, password_9?
?
總結:
從以上的示例中可以看出,使用Java代碼就完美的替代xml配置文件,并且結構更加的清晰。
?使用方法:
Spring對Java配置的支持是由@Configuration注解和@Bean注解來實現的。由@Bean注解的 方法將會實例化、配置和初始化一個 新對象,這個對象將由Spring的IoC容器來管理。@Bean聲明所起到的作用與<bean/>?元素類似。被 @Configuration所注解的類則表示這個類的主要目的是作為bean定義的資源。被@Configuration聲明的類可以通過在同一個類的 內部調用@bean方法來設置嵌入bean的依賴關系。
最簡單的@Configuration?聲明類請參考下面的代碼:(放入spring的name為方法名字,因此一般不加get)
@Configuration public class AppConfig{ @Bean public MyService myService() { return new MyServiceImpl(); } }對于上面的@Beans配置文件相同的XML配置文件如下:
<beans> <bean id="myService" class="com.somnus.services.MyServiceImpl"/> </beans>?
上述配置方式的實例化方式如下:利用AnnotationConfigApplicationContext?類進行實例化
?
public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); MyService myService = ctx.getBean(MyService.class); myService.doStuff(); }?
要使用組件組建掃描,僅需用@Configuration進行注解即可:
@Configuration @ComponentScan(basePackages = "com.somnus") public class AppConfig { ... }?
?
在上面的例子中,com.acme包首先會被掃到,然后再容器內查找被@Component?聲明的類,找到后將這些類按照Sring bean定義進行注冊。
總結
以上是生活随笔為你收集整理的Spring的Java配置方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅析Linux线程调度
- 下一篇: 发布一个实体类属性生成小工具,给开发加点