学习视频来自于:秦疆(遇见狂神说)Bilibili地址
他的自学网站:kuangstudy
但行好事,莫问前程
我们现在要完全不使用Spring的xml配置了,全权交给Java来做!
JavaConfig是Spring的一个子项目,在Spring4之后,它成为了一个核心功能!
使用AnnotationConfigApplicationContext来读取配置

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
将这个类或者方法注册到spring IoC容器中,这个配置就等同于之前在xml里的配置
<beans>
<bean id="getUser" class="pers.tianyu.pojo.User"/>
beans>
@ComponentScan告诉Spring 哪个packages 用注解标识的类 ,会被spring自动扫描并且装入bean容器。
如果你有个类用@Controller注解标识了,那么配置类不加上@ComponentScan指定包,无法自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
在配置类中写方法
实体类
public class User {
private String name;
public String getName() {
return name;
}
@Value("天宇")
public void setName(String name) {
this.name = name;
}
}
配置文件
@Configuration // 代表这是一个Spring的配置类
public class JavaConfig {
@Bean
public User getUser() {
return new User();
}
}
测试类
public class UserTest {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
User user = context.getBean("getUser", User.class);
System.out.println(user.getName());
}
}
使用注解和自动扫描
实体类
@Component(value = "getUser")
public class User {
private String name;
public String getName() {
return name;
}
@Value("天宇")
public void setName(String name) {
this.name = name;
}
}
配置文件
@Configuration // 代表这是一个Spring的配置类
@ComponentScan("pers.tianyu.pojo") // 需要扫描的包
public class JavaConfig {
}
测试类
public class UserTest {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
User user = context.getBean("getUser", User.class);
System.out.println(user.getName());
}
}
传入其他自定义配置类
自定义配置类
@Configuration
public class UserConfig {
@Bean
public User getUser() {
return new User();
}
}
主配置类
@Configuration // 代表这是一个Spring的配置类
@Import(value = UserConfig.class) // 加载自定义配置类
public class JavaConfig {
}
实体类
public class User {
private String name;
public String getName() {
return name;
}
@Value("天宇")
public void setName(String name) {
this.name = name;
}
}
测试类
public static void main(String[] args) {
// 如果完全使用配置类的方式去做,我们就只能通过ApplicationContext 上下文来获取容器,通过配置类的class对象加载
ApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
User user = context.getBean("getUser", User.class);
System.out.println(user.getName());
}
mysql.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?userUnicode=true&characterEncoding=utf8&useSSL=true&serverTime=GMT%2B8
username=root
password=root
maven
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.2.11version>
dependency>
配置文件
@Configuration
@PropertySource("mysql.properties")
public class MySQLConfig {
@Value("${driverClassName}")
private String driverClassName;
@Value("${url}")
private String url;
@Value("${username}")
private String username;
@Value("${password}")
private String password;
@Bean
public DruidDataSource getDruidDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
测试
public class UserTest {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MySQLConfig.class);
DataSource bean = context.getBean("getDruidDataSource", DataSource.class);
System.out.println(bean);
}
}