1. 程式人生 > >SpringBoot學習(二)-->Spring的Java配置方式

SpringBoot學習(二)-->Spring的Java配置方式

play sin ext ryu 代碼 容器 技術 測試結果 支持

二、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功能。

1) 創建工程以及pom.xml文件導入依賴

技術分享圖片
<
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.mmzs.springboot</groupId> <
artifactId>mmzs-springboot</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> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- pom.xml的war報錯解決方法 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <span style="white-space:pre;"> </span> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat8-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
pom.xml

2) 編寫User對象

技術分享圖片
 1 package cn.mmzs.springboot.entity;
 2 
 3 /**
 4  * @author: mmzs
 5  * @date:   2018年6月26日
 6  * @Description: 
 7  * springboot註解詳解:http://www.cnblogs.com/mmzs/p/8874349.html
 8  * @version V1.0
 9 */
10 public class User {
11 
12     private String uname;
13 
14     private String upassword;
15 
16     private Integer uage;
17     
18     private String email;
19 
20     public String getUname() {
21         return uname;
22     }
23 
24     public void setUname(String uname) {
25         this.uname = uname;
26     }
27 
28     public String getUpassword() {
29         return upassword;
30     }
31 
32     public void setUpassword(String upassword) {
33         this.upassword = upassword;
34     }
35 
36     public Integer getUage() {
37         return uage;
38     }
39 
40     public void setUage(Integer uage) {
41         this.uage = uage;
42     }
43 
44     public String getEmail() {
45         return email;
46     }
47 
48     public void setEmail(String email) {
49         this.email = email;
50     }
51 
52 }
User

3) 編寫UserDAO用於模擬與數據庫的交互

技術分享圖片
 1 package cn.mmzs.springboot.dao;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import cn.mmzs.springboot.entity.User;
 7 
 8 /**
 9  * @author: mmzs
10  * @date:   2018年6月26日
11  * @Description: 
12  * springboot註解詳解:http://www.cnblogs.com/mmzs/p/8874349.html
13  * @version V1.0
14 */
15 public class UserDao {
16     
17     public List<User> queryUserList(){
18         List<User> result = new ArrayList<User>();
19         // 模擬數據庫的查詢
20         for (int i = 0; i < 10; i++) {
21             User user = new User();
22             user.setUname("username_" + i);
23             user.setUpassword("password_" + i);
24             user.setUage(i + 1);
25             user.setEmail("mmzsblog"+i+"@163.com");
26             result.add(user);
27         }
28         return result;
29     }
30 
31 }
UserDao

4) 編寫UserService用於實現User數據操作業務邏輯

技術分享圖片
 1 package cn.mmzs.springboot.service;
 2 
 3 import java.util.List;
 4 
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Service;
 7 
 8 import cn.mmzs.springboot.dao.UserDao;
 9 import cn.mmzs.springboot.entity.User;
10 
11 /**
12  * @author: mmzs
13  * @date:   2018年6月26日
14  * @Description: 
15  * springboot註解詳解:http://www.cnblogs.com/mmzs/p/8874349.html
16  * @version V1.0
17 */
18 @Service
19 public class UserService {
20 
21     @Autowired // 註入Spring容器中的bean對象
22     private UserDao userDao;
23 
24     public List<User> queryUserList() {
25         // 調用userDao中的方法進行查詢
26         return this.userDao.queryUserList();
27     }
28 
29 }
UserService

5) 編寫SpringConfig用於實例化Spring容器

技術分享圖片
 1 package cn.mmzs.springboot.javaconfig;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.ComponentScan;
 5 import org.springframework.context.annotation.Configuration;
 6 
 7 import cn.mmzs.springboot.dao.UserDao;
 8 
 9 /**
10  * @author: mmzs
11  * @date:   2018年6月26日
12  * @Description: 
13  * springboot註解詳解:http://www.cnblogs.com/mmzs/p/8874349.html
14  * @version V1.0
15 */
16 @Configuration //通過該註解來表明該類是一個Spring的配置,相當於一個xml文件
17 @ComponentScan(basePackages = "cn.mmzs.springboot") //配置掃描包
18 public class SpringConfig {
19     
20     @Bean // 通過該註解來表明是一個Bean對象,相當於xml中的<bean>
21     public UserDao getUserDAO(){
22         return new UserDao(); // 直接new對象做演示
23     }
24     
25 }
SpringConfig

註:SpringConfig會先掃描cn.mmzs.springboot包,然後在容器內查找被@Configuration聲明的類,找到後將這些類按照bean定義進行註冊。

6) 編寫測試方法用於啟動Spring容器

技術分享圖片
 1 package cn.mmzs.springboot.main;
 2 
 3 import java.util.List;
 4 
 5 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 6 
 7 import cn.mmzs.springboot.entity.User;
 8 import cn.mmzs.springboot.javaconfig.SpringConfig;
 9 import cn.mmzs.springboot.service.UserService;
10 
11 /**
12  * @author: mmzs
13  * @date:   2018年6月26日
14  * @Description: 
15  * springboot註解詳解:http://www.cnblogs.com/mmzs/p/8874349.html
16  * @version V1.0
17 */
18 public class JavaConfigMain {
19 
20     public static void main(String[] args) {
21             // 通過Java配置來實例化Spring容器
22             AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
23             
24             // 在Spring容器中獲取Bean對象
25             UserService userService = context.getBean(UserService.class);
26             
27             // 調用對象中的方法
28             List<User> list = userService.queryUserList();
29             for (User user : list) {
30                 System.out.println("測試結果:\n"+user.getUname() + ", " + user.getUpassword() + ", "
31                                     + user.getUage() + ", " + user.getEmail());
32             }
33             
34             // 銷毀該容器
35             context.destroy();
36         }
37 
38     }
JavaConfigMain

7) 測試效果

測試結果:
username_0, password_0, 1, mmzsblog0@163.com
測試結果:
username_1, password_1, 2, mmzsblog1@163.com
測試結果:
username_2, password_2, 3, mmzsblog2@163.com
測試結果:
username_3, password_3, 4, mmzsblog3@163.com
測試結果:
username_4, password_4, 5, mmzsblog4@163.com
測試結果:
username_5, password_5, 6, mmzsblog5@163.com
測試結果:
username_6, password_6, 7, mmzsblog6@163.com
測試結果:
username_7, password_7, 8, mmzsblog7@163.com
測試結果:
username_8, password_8, 9, mmzsblog8@163.com
測試結果:
username_9, password_9, 10, [email protected]

8) 小結

從以上的示例中可以看出,使用Java代碼就完美的替代xml配置文件,並且結構更加的清晰。

Spring對Java配置的支持是由@Configuration註解和@Bean註解來實現的。

由@Bean註解的 方法將會實例化、配置和初始化一個 新對象,這個對象將由Spring的IoC容器來管理。@Bean聲明所起到的作用與<bean/> 元素類似。

被 @Configuration所註解的類則表示這個類的主要目的是作為bean定義的資源。被@Configuration聲明的類可以通過在同一個類的 內部調用@bean方法來設置嵌入bean的依賴關系。

SpringBoot學習(二)-->Spring的Java配置方式