@Resource 和 @Autowired 的区别
在Spring中找Bean的两种方式:①先根据类型查找②再根据名称查找
@Autowired先根据类型查找,再根据名称查找【根据上述查找结果不唯一,再添加一个
@Qualifier(value=“”),就可以查找】
@Resource先根据名称查找,再根据类型查找【可以添加name=“”,就按照这个name查找】
lombok 插件的作用:减少冗余的Set,Get代码,重写ToString
①添加依赖②增加@Setter和@Getter还有@ToString③idea上安装Lombok插件
Bean的作用域
默认是 单例模式 整个 Spring 中只有一份
1.singleton 单例模式【默认情况下】 ---->处于性能的考虑 只在Spring中存在一份
2.prototype 原型模式 ---->在存Bean的时候加入
@Scope("prototype") @Scope("ConfigurableBeanFactory.SCOPE_PROTOTYPE")
@Component
public class UserBeans {
@Bean
@Scope("prototype")
public User user1(){
User user = new User();
user.setId(18);
user.setName("zhangsan");
return user;
}
}
@Controller
public class UserController {
@Autowired
private User user;
public void sayHi(){
System.out.println("UserController->"+user);
}
}
在默认的单例模式下,Bean只在内存保存一份,在任意时间地方修改则都将被终生修改。
在原型模式下,则每一次@Autowired注入都将会重新开辟一块内存注入一个Bean的一份拷贝。
原型模式的书写要在存Bean时添加如下注解
①@Scope("prototype")②@Scope("ConfigurableBeanFactory.SCOPE_PROTOTYPE")
Bean的生命周期【泛】
Bean的生命周期【细】
1.开辟内存空间(实例化)
2.设置属性(注入属性)
3.初始化
3.1各种通知 BeanNameAware、BeanFactoryAware、ApplicationContextAware的接口方法
3.2初始化前置方法 BeanPostProcessor 初始化前置方法
3.3初始化方法【两种实现方法:xml 方式、注解方式@PostConstruct】
3.4自定义方法
3.5初始化后置方法BeanPostProcessor
4.使用 Bean
5.销毁 Bean 对象
@Component
public class BeanCompont implements BeanNameAware {
@Override
public void setBeanName(String s) {
System.out.println("BeanNameAware->执行了通知");
}
public void myInit(){ //自定义类
System.out.println("BeanCompont->myInit");
}
@PostConstruct
public void doPostConstruct(){
System.out.println("BeanCompont->PostConstruct注解初始化");
}
public void sayHi(){
System.out.println("BeanCompont->sayHi()");
}
@PreDestroy
public void doPreDestory(){
System.out.println("BeanCompont->PreDestroy销毁");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<content:component-scan base-package="com.test.demo"></content:component-scan>
<bean id="beanCompont" class="com.test.demo.component.BeanCompont" init-method="myInit"></bean>
</beans>
public class application {
public static void main(String[] args) {
// ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//
// UserController userController = context.getBean(UserController.class);
// userController.sayHi();
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
BeanCompont compont = context.getBean("beanCompont",BeanCompont.class);
compont.sayHi();
context.destroy();
}
}