一、Spring的Java配置方式
说明:Java配置方式就是使用Java类来替代Spring原先的xml文件
实现方式
主要依赖于@Confuration和@Bean注解实现
@Confuration:使用在类上,说明该类是一个配置类相当于一个xml文件
@Bean:使用在方法上,作用是返回对象将对象保存在IOC容器中相当于XML文件中的bean标签
二、案例一
需求:使用Java配置的方式创建对象
1)在pom文件中引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<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>com.zhiyou100</groupId>
<artifactId>java_conf</artifactId>
<version>1.0-SNAPSHOT</version>
<!--版本-->
<properties>
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<spring.version>4.3.7.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring依赖 -->
<!-- 1.Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 2.Spring dao依赖 -->
<!-- spring-jdbc包括了一些如jdbcTemplate的工具类 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 3.Spring web依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--springMVC依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 日志文件管理包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
</project>
2)创建实体类pojo
package pojo;
public class User {
//主要就下面两行代码,其他事setter,getter,tostring……
private String name;
private String pass;
public User() {
}
public User(String name, String pass) {
this.name = name;
this.pass = pass;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", pass='" + pass + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
3)创建dao层
package dao;
import pojo.User;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
//模拟连接数据库
//使用集合当做数据库
public List<User> queryAll(){
//创建一个新的list集合,用来承接数据,充当返回值
List<User> users=new ArrayList<User>();
//添加数据name,pass
for (int i=0;i<10;i++){
User user = new User();
user.setName("name==>"+i);
user.setPass("pass==>"+i);
users.add(user);
}
return users;
}
}
4)创建service层
package service;
import dao.UserDao;
import pojo.User;
import javax.annotation.Resource;
import java.util.List;
public class UserService {
//注入dao层对象
@Resource
public UserDao userDao;
public List<User> query(){
return userDao.queryAll();
}
}
5)创建Java配置类
package spring_conf;
import dao.UserDao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import service.UserService;
/**
* spring的配置类
* 说明是一个配置类,可替代xml文件,使用注解@Configuration
*/
@Configuration
public class conf {
//创建对象,使用@Bean注解
@Bean
public UserDao userDao(){
return new UserDao();
}
@Bean
public UserService userService(){
return new UserService();
}
}
6)创建测试类
package conftest;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import pojo.User;
import service.UserService;
import spring_conf.conf;
import java.util.List;
public class java_confTest {
public static void main(String[] args) {
//获取java配置类
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(conf.class);
//获取ioc容器中的对象
UserService userService = (UserService) context.getBean("userService");
//调用方法
List<User> query = userService.query();
for (User user:query) {
System.out.println(user);
}
}
}
运行结果为:
案例二
需求:读取外部资源文件
说明:我们可以使用@PropertySource注解指定要读取的文件,通过@Value注解获取值
这里我们先创建一个外部文件db.properties
mysql_driver=com.mysql.jdbc.Driver
mysql_url=jdbc:mysql:///ssm
mysql_user=root
mysql_pass=123456
然后在pom.xml中建立mysql的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
使用@PropertySource注解
属性:
Value:数组,写文件路径
ignoreResourceNotFound:文件找不到是否继续执行,默认值是false,改成true生效
比如:
//声明变量保存driver
@Value("${mysql_driver}")
private String driver_class;
@Value("${mysql_url}")
private String url;
@Value("${mysql_user}")
private String username;
@Value("${mysql_pass}")
private String password;
//配置数据源
@Bean
public DriverManagerDataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//设置driver
dataSource.setDriverClassName(driver_class);
//设置url
dataSource.setUrl(url);
//设置password
dataSource.setPassword(password);
//设置username
dataSource.setUsername(username);
//返回dateSource
return dataSource;
}
创建测试类
@Test
public void test2(){
//获取java配置类
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(conf.class);
//获取dateSource
DriverManagerDataSource dataSource = (DriverManagerDataSource) context.getBean("dataSource");
System.out.println("dateSource==>"+dataSource);
}
单元测试运行结果