吐血整理上万字Spring笔记,不管工作几年都应该看看!

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 属性的设置,以及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 的区别?

    1. @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 注解

生成bean的注解


@Component//@Component // 在容器中加入bean 默认id studentServiceImpl

@Component(“studentService”) // 在容器中加入bean id studentService以下三个用法和 @Component 一样是@Component 的子注解

@Service 用于service@Controller 用于控制层

@Repository 用于持久层 dao

在这里插入图片描述

<?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: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 的区别?

    1. @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 哈哈~好啦,不闲扯了

image

1、JAVA面试核心知识整理(PDF):包含JVMJAVA集合JAVA多线程并发,JAVA基础,Spring原理微服务,Netty与RPC,网络,日志,ZookeeperKafkaRabbitMQ,Hbase,MongoDB,Cassandra,设计模式负载均衡数据库一致性哈希JAVA算法数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

image

2、Redis学习笔记及学习思维脑图

image

3、数据面试必备20题+数据库性能优化的21个最佳实践

image

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):包含JVMJAVA集合JAVA多线程并发,JAVA基础,Spring原理微服务,Netty与RPC,网络,日志,ZookeeperKafkaRabbitMQ,Hbase,MongoDB,Cassandra,设计模式负载均衡数据库一致性哈希JAVA算法数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

[外链图片转存中…(img-Xb6S7jsf-1714645877463)]

2、Redis学习笔记及学习思维脑图

[外链图片转存中…(img-1I1seWfy-1714645877463)]

3、数据面试必备20题+数据库性能优化的21个最佳实践

[外链图片转存中…(img-ebnf6Vzi-1714645877464)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 30
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值