Spring学习笔记之依赖的注解(2)
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。
Spring学习笔记之依赖的注解(2)的更多相关文章
- Spring学习笔记(14)——注解零配置
我们在以前学习 Spring 的时候,其所有的配置信息都写在 applicationContext.xml 里,大致示例如下: java代码: <beans> <bean n ...
- Spring学习笔记1—依赖注入(构造器注入、set注入和注解注入)
什么是依赖注入 在以前的java开发中,某个类中需要依赖其它类的方法时,通常是new一个依赖类再调用类实例的方法,这种方法耦合度太高并且不容易测试,spring提出了依赖注入的思想,即依赖类不由程序员 ...
- Spring 学习笔记(八)—— 注解使用整合
@Autowired —— 自动装配 需先在配置文件中,配置一个org.springframework.beans.factory.annotation. AutowiredAnnotationBe ...
- spring学习笔记 星球日two - 注解方式配置bean
注解要放在要注解的对象的上方 @Autowired private Category category; <?xml version="1.0" encoding=" ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- SpringMVC:学习笔记(11)——依赖注入与@Autowired
SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...
- Spring学习笔记(一)
Spring学习笔记(一) 这是一个沉淀的过程,大概第一次接触Spring是在去年的这个时候,当初在实训,初次接触Java web,直接学习SSM框架(当是Servlet都没有学),于是,养成了一个很 ...
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
随机推荐
- 在Unity中json文件的解析方式
using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using ...
- Python【每日一问】35
问: 基础题: 从键盘输入4个数字,各数字采用空格分隔,对应为变量x0,y0,x1,y1.计算(x0,y0)和(x1,y1)两点之间的距离,输出结果保留1位小数. 比如,键盘输入:0 1 3 5,屏幕 ...
- Linux基础:seq命令总结
本文只总结一些常用的用法,更详细的说明见man seq和 seq --help. seq命令 seq命令用于输出数字序列. 语法格式 Usage: seq [OPTION]... LAST or: s ...
- 0818基于360开源数据库流量审计MySQL Sniffer
开源数据库流量审计MySQL Sniffer 我最推崇的数据库安全产品就是基于流量的数据库审计,因为它不需要更改网络结构,并且也是最关键的是,不影响数据库服务器性能,不用苦口婆心的劝数据库管理员安装监 ...
- RubyMine生成reader/writer方法
RubyMine生成reader/writer方法 在非类的ruby文件中,Alt+Insert会出现新建文件的选项: 在ruby文件的类中,Alt+Insert会出现get/set方法生成提示和重构 ...
- 怎样手动的干净的删除linux上的ORACLE数据库
近期在用VMWARE虚拟机做ORACLE的数据库实验.我们都知道在WINDOWS上,我能够到加入删除程序里去自己主动删除已经安装的全部的应用程序.可是在LINUX上没有这个服务能够进行自己主动的删除. ...
- vim 插件配置博客记录
本来打算自己写下各种经常使用vim的插件安装方法, 可是搜索了下, 发现别人都写过了, 在写一遍也没有意思, 特此记录. Vim 经常使用命令 http://blog.csdn.net/hittata ...
- 【剑指offer】无聊的1+2+...+n
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27964027 题目描写叙述: 求1+2+3+...+n,要求不能使用乘除法.for.whi ...
- 安卓离线SDK Windows版 资源包下载地址全集
1.Tools https://dl-ssl.google.com/android/repository/platform-tools_r19.0.1-windows.zip https://d ...
- Tomcat启动时项目反复载入,导致资源初始化两次的问题
近期在项目开发測试的时候,发现Tomcat启动时项目反复载入,导致资源初始化两次的问题 导致该问题的解决办法: 例如以下图:在Eclipse中将Server Locations设置为"Us ...