public void destroy(){
System.out.println(“Student 销毁方法”);
}
。。。。
}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>
<bean id=“student1” class=“com.qfedu.entity.Student” scope=“singleton”
init-method=“init” destroy-method=“destroy”>
<bean id=“student2” class=“com.qfedu.entity.Student” scope=“prototype”
init-method=“init” destroy-method=“destroy”>
测试:
/**
*bena的生命周期
*/
public class LifeTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(“life/life_bean.xml”);
Student student1 = (Student) classPathXmlApplicationContext.getBean(“student1”);
System.out.println(student1);
System.out.println(“容器销毁”);
// 明示销毁容器,此时会调用容器中所有bean destroy() 方法
// 单例bean 调用 destroy()
// 原型bean 不会调用 destroy() 因为容器不持有该bean
classPathXmlApplicationContext.destroy();
}
}
什么Bean的装配? 就是bean 属性的设置,以及bean 之间依赖关系的配置
1.基于XML的装配
property和构造方法设置值(无参和有参)
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>
Java
UI
H5
php
Java
UI
H5
php
2.测试
public class XmlTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“xml/xml_bean.xml”);
Student student1 = (Student) applicationContext.getBean(“student1”);
System.out.println("student1 = " + student1);
Student student2 = (Student) applicationContext.getBean(“student2”);
System.out.println("student2 = " + student2);
}
}
注解:就是一个标记,记号,通过注解创建bean 并管理bean 之间的依赖关系
注入的注解,一个实例中的属性可以通过以下注解从容器获取对应的bean,并注入进来:
@Autowired:用于对Bean的属性变量、属性的setter方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动配置工作
@Qualifier:与@Autowired注解配合使用,会将默认的按Bean类型装配修改为按Bean的实例名称装配,Bean的实例名称由@Qualifier注解的参数指定。
@Resource:其作用与Autowired一样。@Resource中有两个重要属性:name和type。Spring将name属性解析为Bean实例名称,type属性解析为Bean实例类型。
1.@Autowired + @Qualifier
激活注入的注解:
context:annotation-config</context:annotation-config>
加入注解到容器中:
装配:
public class StudentServiceImpl implements StudentService{
/*@Autowired 不需要 setter方法支持
-
意义: 1.首先根据注解的类型 去容器中查找 如果只有一个,则设置
-
2.如果按照类型查找到 多个 ,则使用 变量名( private StudentDao studentDao) 作为id 去容器中查找
-
3.如果按照变量名找不到,可以使用@Qualifier("studentDao2") 配置,按照传递的参数作为iD 查找
*/
// 去容器中查找 StudentDao 对应实例,并将当前 属性引用
@Autowired
@Qualifier(“studentDao2”)//如果找到多个使用 @Qualifier区分
private StudentDao studentDao;
// public void setStudentDao(StudentDao studentDao){
// this.studentDao = studentDao;
// }
public Student findStudentById(int id) {
return studentDao.findStudentById(id);
}
}
2.@Resource
激活注入的注解:
context:annotation-config</context:annotation-config>
加入注解到容器中:
装配:
public class StudentServiceImpl implements StudentService{
/*
-
@Resource 也是 将容器中的bean 注入到当前对象中
-
意义:
-
1.首先按照声明 属性名作为id 去容器中查找(private StudentDao studentDao ),
-
2.如果没有找到 按照类型查找 ,如果查找到一个则设置值, 如果查到多个,则进入第三步
-
3.@Resource(name = "studentDao2"): 如果找到多个类型的bean 必须传入name 作为id 进行限定
-
@Autowired @Resource 的区别?
-
- @Resource(name = “studentDao2”) 等价于 @Autowired @Qualifier
-
2.意义
-
3.@Resource 是jdk 注解 @Autowired 是spring 注解
-
*/
@Resource(name = “studentDao2”)
private StudentDao studentDao;
// public void setStudentDao(StudentDao studentDao){
// this.studentDao = studentDao;
// }
public Student findStudentById(int id) {
return studentDao.findStudentById(id);
}
}
1.@Autowired 不需要 setter方法支持
意义:
1.首先根据注解的类型 去容器中查找 如果只有一个,则设置
2.如果按照类型查找到 多个 ,则使用 变量名( private StudentDao studentDao) 作为id 去容器中查找
3.如果按照变量 名找不到,可以使用@Qualifier(“studentDao2”) 配置,按照传递的参数作为iD 查找
2.@Resource 也是 将容器中的bean 注入到当前对象中
意义:
1.首先按照声明 属性名作为id 去容器中查找(private StudentDao studentDao )
2.如果没有找到 按照类型查找 ,如果查找到一个设置值 如果多个,则进入第三部
3.@Resource(name = “studentDao2”) 如果找到多个类型的bean 必须传入name 作为id 进行限定
3.@Autowired @Resource 的区别?
1.@Resource(name = “studentDao2”) 等价于 @Autowired @Qualifier
2.@Resource 是jdk 注解 @Autowired spring 注解
@Component//@Component // 在容器中加入bean 默认id studentServiceImpl
@Component(“studentService”) // 在容器中加入bean id studentService以下三个用法和 @Component 一样是@Component 的子注解
@Service 用于service@Controller 用于控制层
@Repository 用于持久层 dao
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:context=“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”>
<context:component-scan base-package=“com.qfedu”></context:component-scan>
//@Component // 在容器中加入bean 默认id studentServiceImpl
//@Component(“studentService”) // 在容器中加入bean id studentService
@Service(“studentService”)// 加入到容器 id studentService
public class StudentServiceImpl implements StudentService {
// 去容器中查找 StudentDao 对应实例,并将当前 属性引用
/**
-
@Autowired 不需要 setter方法支持
-
意义: 1.首先根据注解的类型 去容器中查找 如果只有一个,则设置
-
2.如果按照类型查找到 多个 ,则使用 变量名( private StudentDao studentDao) 作为id 去容器中查找
-
3.如果按照变量 名找不到,可以使用@Qualifier("studentDao2") 配置,按照传递的参数作为iD 查找
-
@Resource 也是 将容器中的bean 注入到当前对象中
-
意义:
-
1.首先按照声明 属性名作为id 去容器中查找(private StudentDao studentDao ),
-
2.如果没有找到 按照类型查找 ,如果查找到一个设置值 如果多个,则进入第三部
-
3.@Resource(name = "studentDao2") 如果找到多个类型的bean 必须传入name 作为id 进行限定
-
@Autowired @Resource 的区别?
-
- @Resource(name = “studentDao2”) 等价于 @Autowired @Qualifier
-
2.意义
-
3.@Resource 是jdk 注解 @Autowired spring 注解
*/
// @Autowired
// @Qualifier(“studentDao2”)//如果找到多个使用 @Qualifier区分
@Resource
private StudentDao studentDao ;
// public void setStudentDao(StudentDao studentDao) {
// this.studentDao = studentDao;
// }
public Student findStudentById(int id) {
return studentDao.findStudentById(id);
}
}
//@Component// 将当前类 创建一个bean 加入到容器中 id studentDaoImpl
@Repository // 加入到容器 id studentDaoImpl
public class StudentDaoImpl implements StudentDao{
public Student findStudentById(int id) {
// 模拟取数据库查询
Student student = new Student();
student.setId(id);
student.setName(“XXXXX”);
return student;
}
}
测试:
总结
阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
2、Redis学习笔记及学习思维脑图
3、数据面试必备20题+数据库性能优化的21个最佳实践
ents StudentDao{
public Student findStudentById(int id) {
// 模拟取数据库查询
Student student = new Student();
student.setId(id);
student.setName(“XXXXX”);
return student;
}
}
测试:
总结
阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了
[外链图片转存中…(img-ge4mlDa5-1714645877462)]
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
[外链图片转存中…(img-Xb6S7jsf-1714645877463)]
2、Redis学习笔记及学习思维脑图
[外链图片转存中…(img-1I1seWfy-1714645877463)]
3、数据面试必备20题+数据库性能优化的21个最佳实践
[外链图片转存中…(img-ebnf6Vzi-1714645877464)]