自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring的Java配置方式,告別XML配置

開發(fā) 前端
在Spring1.x時代,都是通過xml文件配置bean,隨著項(xiàng)目的不斷擴(kuò)大,需要將xml配置分放到不同的配置文件中,需要頻繁的在java類和xml配置文件中切換。

剛使用Spring框架時一般都是通過xml配置文件的方式,進(jìn)而使用注解方式實(shí)現(xiàn),我們再來學(xué)習(xí)一種使用Java類配置的方式,也稱為Java Config來配置Spring框架。這種方式讓我們告別XML文件,完全通過Java體系內(nèi)的技術(shù)點(diǎn)實(shí)現(xiàn)。

好處就在于,在開發(fā)過程中不需要在Java類和XML文件中來回切換,而是僅僅編寫Java即可。

SpringBoot中,也都是通過該方式實(shí)現(xiàn)的配置。從Spring框架的發(fā)展歷史來漸漸深入吧!

一、Spring的發(fā)展

這些版本其實(shí)無需記憶,了解版本之間的大概變化即可

1.1 Spring 1.X時代

在Spring1.x時代,都是通過xml文件配置bean,隨著項(xiàng)目的不斷擴(kuò)大,需要將xml配置分放到不同的配置文件中,需要頻繁的在java類和xml配置文件中切換。

1.2 Spring2.X時代

隨著JDK 1.5帶來的注解支持,Spring2.x可以使用注解對Bean進(jìn)行聲明和注入,大大的減少了xml配置文 件,同時也大大簡化了項(xiàng)目的開發(fā)。

那么,問題來了,究竟是應(yīng)該使用xml還是注解呢?

最佳實(shí)踐:

  • 應(yīng)用的基本配置用xml,比如:數(shù)據(jù)源、資源文件等;
  • 業(yè)務(wù)開發(fā)用注解,比如:Service中注入bean等;

1.3 Spring3.X和Spring4.X時代

從Spring3.x開始提供了Java配置方式,使用Java配置方式可以更好的幫助你配置的Bean,并且Spring4.x和Spring boot都推薦使用Java配置的方式

目前我們公司在使用Spring5版本,就在本月【2022年11月】Spring 6也發(fā)布了,不過要求使用Java 17及以上版本,后續(xù)企業(yè)可能會慢慢迭代吧!企業(yè)中暫時不會使用這么新的技術(shù)

二、Spring的Java配置方式

說明:Java配置方式也是Spring4.X推薦使用的方式,作用呢是可以完全替代XML配置,我們就不需要在XML文件和Java類中頻繁的切換開發(fā),我們可以完全面向Java語言做開發(fā)。

在實(shí)戰(zhàn)之前我們需要知道這么幾個注解

2.1、@Configuration 和 @Bean

看到這兩個標(biāo)簽相信有些朋友就已經(jīng)知道這兩個標(biāo)簽的作用了。

說明:Spring的Java配置是通過@Configuration和@Bean兩個注解實(shí)現(xiàn)

@Configuration:作用在類上,說明該類相當(dāng)于一個xml文件

@Bean:作用在方法上,返回對象,將對象存放在Spring容器中,相當(dāng)于xml文件中的<bean>標(biāo)簽

接下來我們通過一個案例使用Java配置的方式實(shí)現(xiàn)Spring框架的配置和使用

三、案例1

首先貼出我們的最終的項(xiàng)目結(jié)構(gòu)

3.1 案例描述

通過使用Java配置的方式實(shí)現(xiàn)Spring的bean管理,簡單的說使用使用Java類替代xml配置文件實(shí)現(xiàn)用戶的查詢,我們這里將數(shù)據(jù)封裝到List集合中遍歷集合打印輸出。

3.2 實(shí)現(xiàn)

1)創(chuàng)建項(xiàng)目,創(chuàng)建普通項(xiàng)目導(dǎo)入jar包或者創(chuàng)建maven項(xiàng)目都行,這里創(chuàng)建maven項(xiàng)目,貼出項(xiàng)目結(jié)構(gòu)和pom.xml配置

版本可以隨意切換

<!-- 定義jar包版本 --><properties><!-- 單元測試 --><junit.version>4.12</junit.version><!-- spring版本 --><spring.version>5.1.2.RELEASE</spring.version>

</properties><!-- 引入spring依賴 --><dependencies><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency></dependencies>

2)編寫User類

public class User {
private String userName;
private String userPass;
private Integer userId;
public User(){
super();
}
public User(String userName, String userPass, Integer userId){
super();
this.userName = userName;
this.userPass = userPass;
this.userId = userId;
}
public String getUserName(){
return userName;
}
public void setUserName(String userName){
this.userName = userName;
}
public String getUserPass(){
return userPass;
}
public void setUserPass(String userPass){
this.userPass = userPass;
}
public Integer getUserId(){
return userId;
}
public void setUserId(Integer userId){
this.userId = userId;
}
@Overridepublic String toString(){
return "User [userName=" + userName + ", userPass=" + userPass + ", userId=" + userId + "]";
}
}

3)編寫Dao層,使用List集合模擬數(shù)據(jù)庫,實(shí)現(xiàn)數(shù)據(jù)交互

public class UserDao {

public List<User> queryAll(){
List<User> users = new ArrayList<User>();
//添加用戶,模擬數(shù)據(jù)庫for(int i = 1;i < 11;i++) {
User user = new User("張三"+i, "123456", i);
users.add(user);
}
//返回用戶return users;
}
}

4)編寫Service層,實(shí)現(xiàn)用戶業(yè)務(wù)邏輯

public class UserService {

//注入Dao層對象@Resourceprivate UserDao userDao;

public List<User> queryAll(){
return userDao.queryAll();
}
}

小貼士:我們這里的dao層和service層沒有寫接口

5)編寫Spring配置類,替代XML文件,用于實(shí)例化Spring容器

//說明該類是一個配置類,相當(dāng)于一個xml文件
@Configuration
//掃描包
@ComponentScan(basePackages="com.stt")
public class SpringConfig {

//創(chuàng)建dao層對象@Beanpublic UserDao userDao(){
return new UserDao();
}
//創(chuàng)建Service對象@Beanpublic UserService userService(){

return new UserService();
}
}

小貼士:這個類就是我們的配置類,可以看出我們這里使用了三個注解,這幾個注解我們在上邊說過了,這里就不在贅述。

6)編寫測試類,啟動Spring容器,并完成測試

public class SpringApplication {
public static void main(String[] args){
//獲取SpringConfig類中的所有配置
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
//獲取Service對象
UserService userService = context.getBean(UserService.class);
//調(diào)用方法
List<User> list = userService.queryAll();
for (User user : list) {
System.out.println(user);
}
//銷毀容器
context.close();
}
}

通過以上示例我們簡單完成使用Java配置方式實(shí)現(xiàn)bean管理。其中重點(diǎn)在于配置類和其中的三個注解。

四、案例2

4.1 案例描述

我們在開發(fā)項(xiàng)目中會連接數(shù)據(jù)庫,而且數(shù)據(jù)的配置寫在db.properties文件中,我們需要讀取該文件并且配置數(shù)據(jù)源,我們這個案例就來實(shí)現(xiàn)連接數(shù)據(jù)庫,并且使用dbcp數(shù)據(jù)庫連接池。

4.2 問題

1)使用Java配置怎么讀取db.properties文件

2)讀取出來之后怎么給dbcp連接池中的driver,url等屬性賦值

那么我們帶著問題看以下代碼配置,在原先配置類的基礎(chǔ)上進(jìn)行修改

配置類:

//說明該類是一個配置類,相當(dāng)于一個xml文件
@Configuration
//掃描包
@ComponentScan(basePackages="com.stt")
//讀取外部配置文件
@PropertySource(value="classpath:resource/db.properties")

public class SpringConfig {

//創(chuàng)建dao層對象@Beanpublic UserDao userDao() {
return new UserDao();
}
//創(chuàng)建Service對象@Beanpublic UserService userService() {

return new UserService();
}
//獲取文件中的值,使用Value注解賦值給變量保存起來//注意:我們使用${}表達(dá)式獲取值,參數(shù)與配置文件中的鍵一致@Value("${driver}")private String driver;
@Value("${url}")private String url;
@Value("${user}")private String user;
@Value("${pass}")private String pass;
//配置數(shù)據(jù)庫連接池@Beanpublic DataSource dataSource() {
//創(chuàng)建DBCP連接池對象
BasicDataSource dataSource = new BasicDataSource();
//設(shè)置屬性
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(pass);
return dataSource;
}

}

測試類:

public class SpringApplication {
public static void main(String[] args){
//獲取SpringConfig類中的所有配置
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
//獲取Service對象
UserService userService = context.getBean(UserService.class);
//獲取數(shù)據(jù)源對象
BasicDataSource dataSource = (BasicDataSource)context.getBean("dataSource");
System.out.println(dataSource);

//調(diào)用方法/*List<User> list = userService.queryAll();
for (User user : list) {
System.out.println(user);
}*///銷毀容器
context.close();
}
}

小貼士:

1)@PropertySource:我們可以使用該注解讀取外部配置文件

如何引入多個配置文件?

@PropertySource(value = {"classpath:db.properties","其他文件路徑"})

如果文件不存在怎么辦?

添加ignoreResourceNotFound屬性改為true,文件不存在時也不會報錯

@PropertySource(value = {"classpath:db.properties","xxx"},ignoreResourceNotFound = true)

2)@Value:我們使用該注解給變量注入固定的值

五、總結(jié)

至此我們使用Java配置方式完成spring的bean管理可以簡單使用了,其中我們使用了一個配置類和多個注解一起完成,希望可以幫助到讀者。

文章出自:??添甄??,如有轉(zhuǎn)載本文請聯(lián)系【添甄】今日頭條號。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2011-02-28 13:51:30

Spring事物配置

2009-06-19 18:26:38

Spring事務(wù)配置

2011-11-25 10:25:27

SpringJava

2023-11-01 15:07:51

環(huán)境配置方式

2009-06-18 11:15:53

裝配beanxml配置Spring

2015-05-06 10:05:22

javajava框架spring aop

2010-08-03 09:20:33

Flex讀取XML配置

2009-06-17 14:17:04

SpringXML配置文件

2009-06-17 14:36:10

SpringXML配置文件

2010-02-26 14:05:57

WCF通信方式

2023-08-07 16:14:32

propertiesSpring框架

2018-07-11 15:32:57

KubernetesDNS方式

2025-04-27 03:00:00

Spring集成測試

2010-03-05 15:14:55

Ubuntu網(wǎng)絡(luò)配置

2009-07-14 14:08:35

Tapestry 5.web.xml的配置

2013-07-30 11:30:42

Windows PhoWindows Pho

2025-01-21 11:46:26

2009-07-17 16:49:18

iBATIS XML配

2009-07-07 14:11:07

XML來配置Servl

2009-09-22 14:44:18

Hibernate.c
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號