1. @Configuration注解
具体如代码:
/**
* @Author windy
* @Desp 学习基于java类配置
* @Configuration注解表示 该类可以为spring提供bean配置信息
* 其本身被@Component 注解 说明其也是一个bean 并且可以被context:component-scan标签扫描
* @Bean 表示他是一个是spring bean 类型为方法的返回类型 name为方法名
* 看注解可以发现 可以自定义name
* @Date 2019-08-17 20:38
*/
@Configuration
public class DaoConfig {
@Bean
public UserDao userDao(){
return new UserDao();
}
@Bean("myLogDao")
public LogDao logDao(){
return new LogDao();
}
}
相当于使用bean的配置文件配置 只是java类配置更灵活
2. Bean作用范围及生命过程方法
以前使用bean的xml配置知道bean默认的作用域为singleton 单例,即第一次访问创建,之后的调用、访问都是从spring中返回之前的bean对象
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* @Author windy
* @Desp @Component 表示被修饰的类 是一个spring bean对象
* 其衍生了很多特有的注解 例如 @Service @Controller @Repository 这些也是代表该类是一个bean
* 只是更加鲜明的表示 该类的作用 例如@Service 表示是一个业务层的bean
* @Scope 表示该类的作用域 默认是singleton 单例 可以是prototype 原型 这样每次调用 都返回一个新的bean
* 对于web应用程序 还有另外三种作用域 分别是 request session globalSession应该类似application 全局有效访问
* @Date 2019-08-17 20:55
*/
@Scope
@Component
public class ComponentConfig {
}
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* @Author windy
* @Desp @PostConstruct 是java注解啊 它类似在bean xml配置的init-method方法 初始化时执行
* 可以多个 按照顺序执行
* @PreDestroy 字面意思也知道 bean销毁之前执行的方法 类似bean xml配置的 destroy-method配置
* 可以多个 按照反序执行
* @Date 2019-08-17 21:02
*/
@Component
public class Boss {
@PostConstruct
public void init1(){
System.out.println("初始化1");
}
@PostConstruct
public void init2(){
System.out.println("初始化2");
}
@PreDestroy
public void destroy1(){
System.out.println("destroy 1");
}
@PreDestroy
public void destroy2(){
System.out.println("destroy 2");
}
}
配置文件
//配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.windy.springbean"/>
</beans>
测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @Author windy
* @Desp
* @Date 2019-08-17 21:08
*/
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
((ClassPathXmlApplicationContext)ctx).destroy();
}
}
//结果如下
初始化1
初始化2
destroy 2
destroy 1```