Spring学习笔记之依赖的注解(2)
时间:2022-06-22
本文章向大家介绍Spring学习笔记之依赖的注解(2),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.0 注解,不能单独存在,是Java中的一种类型 1.1 写注解 1.2 注解反射 2.0 spring的注解 spring的 @Controller@Component@Service//更多典型化注解,但是@Controller@Service建议使用 @service(“personService”)可以代替set get 方法,@Resource(name=personDao) @Autowired//按照类型匹配 @Qualifier(“student”)两者结合相当于id匹配 相当于java的@Resource(name=”student”) 3.0 DI(依赖注入)的注解@Resource、@PostConstruct applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="person" class="come.demo.spring.di.annotation.Person">
</bean>
<bean id="student" class="come.demo.spring.di.annotation.Student"></bean>
<context:annotation-config></context:annotation-config>
</beans>
Person.java
public class Person {
/**
* @Autowired
@Qualifier("student")
==
@Resource(name="student")
*/
@Resource(name="student")
private Student student;
@PostConstruct //在构造器之后
public void init(){
System.out.println("init");
}
@PreDestroy //在spring容器销毁之前
public void destroy(){
}
public void say(){
this.student.say();
}
}
Student.java public class Student { public void say(){ System.out.println(“student”); } }
PersonTest.java
public class PersonTest {
/**
* 1、启动spring容器
* 2、把spring配置文件中的bean实例化(person,student)
* 3、当spring容器解析配置文件
* <context:annotation-config></context:annotation-config>
* spring容器会在纳入spring管理的bean的范围内查找哪些类的属性上是否加有@Resource注解
* 4、如果在属性上找到@Resource注解
* 如果@Resource的注解的name属性的值为""
* 则把@Resource所在的属性的名称和spring容器中的id作匹配
* 如果匹配成功,则赋值
* 如果匹配不成功,则会按照类型进行匹配
* 如果匹配成功,则赋值,匹配不成功,报错
* 如果@Resource的注解的name属性的值不为""
* 则解析@Resource注解name属性的值,把值和spring容器中的ID进行匹配
* 如果匹配成功,则赋值
* 如果匹配不成功,则报错
*
* 说明:
* 注解代码越来越简单,效率越来越低
* 注解只能应用于引用类型
*/
@Test
public void testDIAnnotation(){
ApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person)context.getBean("person");
person.say();
}
}
4.0 scan-类扫描的注解(减少配置代码,却降低了性能)
4.1 配置文件
<context:component-scan
base-package="com.demo.spring.scan.annotation"></context:component-scan
4.2 原理:
0.0 把一个类放到spring容器中,该类也称为component
1.0 启动spring容器
2.0 当spring容器解析配置文件时,会去base-package指定的包及子包中扫描所有的类。
3.0 把类放到spring容器中
看哪些类上面是否加有@Component注解
如果该类上面有@Component注解
检查该类的value属性是否为““
如果为”“,则会把该类注解所在的类的类名以这样的方式
@Component
public class Person{
}
==
<bean id = "person" class="..person"
如果该类的value不为空,则以这样的形式:
@Component("aa")
public class Person{}
==
<bean id="aa" class="..Person"
4.0 扫描spring容器中所有的bean,进行@Resource规制
5.0 小结
1、IOC把一个类放到容器里边,spring容器给他创建对象
1.1 spring创建对象的三种方式
1 默认构造函数 2.静态工程3.实例工程
默认情况下把一个类放到spring容器里面,默认是单例。
什么时候创建单例对象?
默认情况下spring容器启动时候创建单例对象。
但是把lazy-init="true"的话,是在contextgetbean时候才创建对象。
如果scope="property"即多例,在contextgetbean时候才创建对象。
初始化(init,只需要在配置文件中init-method,spring容器在调用完构造器立即自动调用)
销毁(destroy,在spring容器销毁时候才内部调用)
2、DI给属性赋值
2.1赋值方法
利用set方法可以给属性赋值还可以利用构造器,也可以用注解。进行注入。
基本属性、引用类型、集合进行装配。
@Resource用于给一个属性进行注入。
类扫描<context:component-scan减少配置文件代码。
6.0 spring注解的继承 xml的继承需要,parent:spring容器中的继承 而注解的继承配置文件不需要parent。
- 网络安全黑暗森林法则:2015 ISC 深度回顾
- Codeforces 626G Raffles(贪心+线段树)
- window.opener.location 安全风险讨论
- Vijos P1497 立体图【模拟】
- Vijos P1127 级数求和【模拟】
- 新型漏洞:利用浏览器Cookie绕过HTTPS并窃取私人信息
- Vijos P1113 不高兴的津津【模拟】
- Linux下MySQL的彻底卸载和安装配置字符集
- Codeforces 626F Group Projects(滚动数组+差分dp)
- Vijos P1103 校门外的树【线段树,模拟】
- BZOJ 1061: [Noi2008]志愿者招募【单纯形裸题】
- SQL vs NoSQL:如何选择?
- 线性规划之单纯形法【超详解+图解】
- NodeJS 应用仓库钓鱼
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- gearman中worker常驻后台,导致MySQL server has gone away的解决方法
- php 使用html5 XHR2实现上传文件与进度显示功能示例
- php高性能日志系统 seaslog 的安装与使用方法分析
- PHP实现文件上传后台处理脚本
- 让whoops帮我们告别ThinkPHP6的异常页面
- PHP实现文件上传操作和封装
- gearman中任务的优先级和返回状态实例分析
- php实现文件上传基本验证
- php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
- php使用fputcsv实现大数据的导出操作详解
- php的无刷新操作实现方法分析
- PHP实现创建一个RPC服务操作示例
- php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
- gearman管理工具GearmanManager的安装与php使用方法示例
- php 的多进程操作实践案例分析