Spring的Java配置方式

喜欢有帮助记得点赞哦,加关注不迷路

相信大家在刚使用spring框架时都是使用的xml配置文件的方式进而使用注解方式实现,今天我们一起学习一下使用Java配置的方式配置Spring框架。在此之前先和大家聊一聊Spring框架的发展历史。

一、Spring的发展

1.1 Spring 1.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配置的方式

目前Spring框架已经发展到了5。

二、Spring的Java配置方式

说明:Java配置方式也是Spring4.X推荐使用的方式,作用呢是可以完全替代XML配置,我们就不需要在XML文件和Java类中频繁的切换开发,我们可以完全面向Java语言做开发。

在实战之前我们需要知道这么几个注解

2.1 @Configuration 和 @Bean

看到这两个标签相信有些朋友就已经知道这两个标签的作用了。

说明:Spring的Java配置是通过@Configuration和@Bean两个注解实现

@Configuration作用在类上,说明该类相当于一个xml文件

@Bean作用在方法上,返回对象,将对象存放在Spring容器中,相当于xml文件中的<bean>标签

接下来我们通过一个案例使用Java配置的方式实现Spring框架的配置和使用

三、案例1

首先贴出我们的最终的项目结构

3.1 案例描述

我们通过使用Java配置的方式实现Spring的bean管理,简单的说使用使用Java类替代xml配置文件实现用户的查询,我们这里将数据封装到List集合中遍历集合打印输出。

3.2 实现

1)创建项目,创建普通项目导入jar包或者创建maven项目都行,我这里创建maven项目,创建步骤就不说了,直接贴出项目结构和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>

备注:我这里使用的是Spring5.1.2版本。

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;
	}
	@Override
	public String toString() {
		return "User [userName=" + userName + ", userPass=" + userPass + ", userId=" + userId + "]";
	}
	
	
}

3)编写Dao层,使用List集合模拟数据库,实现数据交互

public class UserDao {

	public List<User> queryAll(){
		List<User> users = new ArrayList<User>();
		//添加用户,模拟数据库
		for(int i = 1;i < 11;i++) {
			User user = new User("张三"+i, "123456", i);
			users.add(user);
		}
		//返回用户
		return users;
	}
}

4)编写Service层,实现用户业务逻辑

public class UserService {

	//注入Dao层对象
	@Resource
	private UserDao userDao;
	
	public List<User> queryAll(){
		return userDao.queryAll();
	}
}

备注:我们这里的dao层和service层没有写接口

5)编写Spring配置类,替代XML文件,用于实例化Spring容器

//说明该类是一个配置类,相当于一个xml文件
@Configuration
//扫描包
@ComponentScan(basePackages="com.stt")
public class SpringConfig {

	//创建dao层对象
	@Bean
	public UserDao userDao() {
		return new UserDao();
	}
	//创建Service对象
	@Bean
	public 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);
		//调用方法
		List<User> list = userService.queryAll();
		for (User user : list) {
			System.out.println(user);
		}
		//销毁容器
		context.close();
	}
}

小结:通过以上示例我们简单完成使用Java配置方式实现bean管理。其中重点在于配置类和其中的三个注解。

四、案例2

4.1 案例描述

我们在开发项目中会连接数据库,而且数据的配置写在db.properties文件中,我们需要读取该文件并且配置数据源,我们这个案例就来实现连接数据库,并且使用dbcp数据库连接池。

4.2 问题

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

2)读取出来之后怎么给dbcp连接池中的driver,url等属性赋值

那么我们带着问题看以下代码配置,在原先配置类的基础上进行修改

配置类:

//说明该类是一个配置类,相当于一个xml文件
@Configuration
//扫描包
@ComponentScan(basePackages="com.stt")
//读取外部配置文件
@PropertySource(value="classpath:resource/db.properties")

public class SpringConfig {

	//创建dao层对象
	@Bean
	public UserDao userDao() {
		return new UserDao();
	}
	//创建Service对象
	@Bean
	public UserService userService() {
		
		return new UserService();
	}
	//获取文件中的值,使用Value注解赋值给变量保存起来
	//注意:我们使用${}表达式获取值,参数与配置文件中的键一致
	@Value("${driver}")
	private String driver;
	@Value("${url}")
	private String url;
	@Value("${user}")
	private String user;
	@Value("${pass}")
	private String pass;
	//配置数据库连接池
	@Bean
	public DataSource dataSource() {
		//创建DBCP连接池对象
		BasicDataSource dataSource = new BasicDataSource();
		//设置属性
		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);
		//获取数据源对象
		BasicDataSource dataSource = (BasicDataSource)context.getBean("dataSource");
		System.out.println(dataSource);
		
		//调用方法
		/*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:我们使用该注解给变量注入固定的值

五、总结

至此我们使用Java配置方式完成spring的bean管理可以简单使用了,其中我们使用了一个配置类和多个注解一起完成,希望可以帮助到读者。大家可以点击下载项目源码

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石添的编程哲学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值