重温Spring之旅3——装配Bean(手工装配:使用注解方式)
来源:互联网 发布:mysql严格模式 编辑:程序博客网 时间:2024/06/05 19:50
Autowired注解
手工装配--->使用注解方式--->Autowired注解
注意:
*如果使用jdk1.5,需要引入
com.springsource.javax.annotation-1.0.0.jar包
*如果使用jdk1.6,不需要引入
com.springsource.javax.annotation-1.0.0.jar包
com.springsource.javax.annotation-1.0.0.jar
该jar包在spring-framework-3.0.2.RELEASE-dependencies\javax.annotation\com.springsource.javax.annotation\1.0.0包下
Autowired标注在字段上
* @Autowired注解默认按类型进行装配* 获取该注解标注的字段的类型---PersonDao类型
* 以该类型为条件到spring容器(beans.xml)中去查找bean的id节点的类型是PersonDao类型.
* 找到以后,获取该节点对应的对象,利用反射直接为personDao变量赋值
* @Qualifier(“personDao”)该注解以名字为条件查找依赖对象
* 以该注解的的参数personDao条件到spring容器(beans.xml)中去查找bean的id节点的
值是personDao的对象
* 找到以后,获取该节点对应的对象, 利用反射直接为personDao变量赋值
如果不存在该名称,抛出异常
@Autowired
private PersonDao personDao;//用于字段上
@Autowired @Qualifier("personDao")
private PersonDao personDao;//用于字段上
Autowired标注在setter方法上
@Autowired注解默认按类型进行装配* 获取 setPersonDao()方法的参数的类型---PersonDao类型
* 以该类型为条件到spring容器(beans.xml)中去查找bean的id节点的类型是PersonDao类型.
* 找到以后,获取该节点对应的对象, 把该对象作为实参传递给该setPersonDao(PersonDao personDao)的形参.
@Qualifier("personDao")该注解以名字为条件查找依赖对象
* 以该注解的的参数personDao条件到spring容器(beans.xml)中去查找bean的id节点的
值是PersonDao的对象
* 找到以后,获取该节点对应的对象, 把该对象作为实参传递给该setPersonDao(
PersonDao personDao)的形参.
* 如果不存在该名称,抛出异常
@Autowired
public void setPersonDao(PersonDao personDao) { //用于属性的set方法上
this.personDao = personDao;
}
@Autowired @Qualifier("personDao")
public void setPersonDao(PersonDao personDao) { //用于属性的set方法上
this.personDao = personDao;
}
例子:
IUserDao.java
package com.csii.dao;public interface IUserDao {public void save();}UserDaoImpl.java
package com.csii.dao;public class UserDaoImpl implements IUserDao {public UserDaoImpl() {super();System.out.println("这是UserDaoImpl的构造方法");}@Overridepublic void save() {System.out.println("这是UserDaoImpl的save()方法");}}IUserService.java
package com.csii.service;public interface IUserService {public void save();}UserServiceImpl.java
package com.csii.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import com.csii.dao.IUserDao;public class UserServiceImpl implements IUserService {/** * 完成对对象注入的操作(注解) * Autowired标注在字段上(默认按照属性的类型进行匹配) * @Autowired:如果放置到字段上,就会用当前属性的类型IUserDao到Spring容器中查找<bean class>对应的数据类型 * *如果找到了,就返回对应的数据类型,并通过反射机制将对象UserDaoImpl赋值给当前的属性userDao * *如果没有找到,就会抛出异常。 * @Qualifier("userDao"):添加此注解此时不是在用类型进行匹配,而是用@Qualifier定义的属性名称到spring容器 * 中找<bean id>对应的id的属性值 * * 如果2个值相等,就返回对应的对象,并通过反射机制将对象UserDaoImpl赋值给当前的属性userDao * * 如果2个值不相等,就抛出异常 * */@Autowired @Qualifier("userDao1")private IUserDao userDao;public IUserDao getUserDao() {return userDao;}/** * 完成对对象注入的操作(注解) * Autowired标注在setter方法上 * @Autowired:如果放置到set方法上,就会用set方法中传递的参数类型IUserDao到spring容器的中查找<bean class>对应的数据类型 * * 如果找到了,就返回对应的数据类型,并将返回的对象UserDaoImpl通过形参传递给实参,将实参赋值给userDao * * 如果没有找到,就会抛出异常 * @Qualifier("userDao"):添加此注解此时不是在用类型进行匹配,而是用@Qualifier定义的属性名称到spring容器中找<bean id>对应的id的属性值 * * 如果2个值相等,就返回对应的对象,并将返回的对象UserDaoImpl通过形参传递给实参,将实参赋值给userDao * * 如果2个值不相等,就抛出异常 */@Autowired @Qualifier("userDao1")public void setUserDao(IUserDao userDao) {this.userDao = userDao;}public UserServiceImpl() {super();System.out.println("这是UserServiceImpl类的构造方法");}@Overridepublic void save() {userDao.save();System.out.println("这是UserServiceImpl类的save()方法");}}beans.xml
<?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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 添加基于注解的命名空间:添加:xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"--><!-- <context:annotation-config/>这个配置隐式注册了多个对注解进行解析处理的处理器--><context:annotation-config/><bean id="userDao1" class="com.csii.dao.UserDaoImpl" /><bean id="userService" class="com.csii.service.UserServiceImpl"><!-- <property name="userDao" ref="userDao"></property> --></bean></beans>App.java
package com.csii.app;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.csii.service.IUserService;public class App {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");IUserService bean = (IUserService) ctx.getBean("userService");bean.save();}}
@Resource
手工装配--->使用注解方式--->resource注解
Resource注解标注在字段上
*@Resource注解默认按名称装配。*如果没有指定name属性,获取该注解标注的字段值---personDao,以该字段值为条件到spring容器(beans.xml)中去查找bean的id节点的值是 personDao的节点
*找到以后,获取该节点对应的对象, 利用反射直接为personDao变量赋值
*如果没有找到.并且按照默认的名称找不到依赖对象时, @Resource注解会回退到按类型装配,获取该注解标注的字段类型--PersonDao
以该类型为条件到spring容器(beans.xml)中去查找bean的节点的类型是PersonDao类型的对象
找到以后,获取该节点对应的对象,利用反射直接为personDao变量赋值
*如果指定name属性,只能按名称装配
*获取name属性的值 personDao,以该值为条件到spring容器(beans.xml)中去查找bean的id节点的值是PersonDao的对象
*找到以后,获取该节点对应的对象,利用反射直接为personDao变量赋值
*如果不存在该名称,抛出异常
@Resource(name="personDao")
private PersonDao personDao;;//用于字段上
resource注解标注在setter方法上
*@Resource注解默认按名称装配。*如果没有指定name属性,获取setPersonDao()方法的属性名---personDao,
以该属性名为条件到spring容器(beans.xml)中去查找bean的id节点的值是personDao的节点
*找到以后,获取该节点对应的对象, 把该对象作为实参传递给该setPersonDao(PersonDao personDao)的形参.
*如果没有找到.并且按照默认的名称找不到依赖对象时,@Resource注解会回退到按类型装配,获取setPersonDao()方法的参数类型---PersonDao
以该类型为条件到spring容器(beans.xml)中去查找bean的节点的类型是PersonDao类型对象
找到以后,获取该节点对应的对象, 把该对象作为实参传递给该setPersonDao(PersonDao personDao)方法的形参
* 如果指定name属性 只能按名称装配
*获取name属性的值,以该值为条件到spring容器(beans.xml)中去查找bean的id节点的值是PersonDao的对象
*找到以后,获取该节点对应的对象, 把该对象作为实参传递给该setPersonDao(PersonDao personDao)的形参.
*如果不存在该名称,抛出异常
@Resource(name="personDao")
public void setPersonDao(PersonDao personDao){
this.personDao = personDao;
}
例子:
IUserDao.java
package com.csii.dao;public interface IUserDao {public void save();}
UserDaoImpl.java
package com.csii.dao;public class UserDaoImpl implements IUserDao {public UserDaoImpl() {super();System.out.println("这是UserDaoImpl的构造方法");}@Overridepublic void save() {System.out.println("这是UserDaoImpl的save()方法");}}
IUserService.java
package com.csii.service;public interface IUserService {public void save();}
UserServiceImpl.java
package com.csii.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import com.csii.dao.IUserDao;public class UserServiceImpl implements IUserService {/** * 完成对对象注入的操作(注解) * Autowired标注在字段上(默认按照属性的类型进行匹配) * @Autowired:如果放置到字段上,就会用当前属性的类型IUserDao到Spring容器中查找<bean class>对应的数据类型 * *如果找到了,就返回对应的数据类型,并通过反射机制将对象UserDaoImpl赋值给当前的属性userDao * *如果没有找到,就会抛出异常。 * @Qualifier("userDao"):添加此注解此时不是在用类型进行匹配,而是用@Qualifier定义的属性名称到spring容器 * 中找<bean id>对应的id的属性值 * * 如果2个值相等,就返回对应的对象,并通过反射机制将对象UserDaoImpl赋值给当前的属性userDao * * 如果2个值不相等,就抛出异常 * */@Autowired @Qualifier("userDao1")private IUserDao userDao;public IUserDao getUserDao() {return userDao;}/** * 完成对对象注入的操作(注解) * Autowired标注在setter方法上 * @Autowired:如果放置到set方法上,就会用set方法中传递的参数类型IUserDao到spring容器的中查找<bean class>对应的数据类型 * * 如果找到了,就返回对应的数据类型,并将返回的对象UserDaoImpl通过形参传递给实参,将实参赋值给userDao * * 如果没有找到,就会抛出异常 * @Qualifier("userDao"):添加此注解此时不是在用类型进行匹配,而是用@Qualifier定义的属性名称到spring容器中找<bean id>对应的id的属性值 * * 如果2个值相等,就返回对应的对象,并将返回的对象UserDaoImpl通过形参传递给实参,将实参赋值给userDao * * 如果2个值不相等,就抛出异常 */@Autowired @Qualifier("userDao1")public void setUserDao(IUserDao userDao) {this.userDao = userDao;}public UserServiceImpl() {super();System.out.println("这是UserServiceImpl类的构造方法");}@Overridepublic void save() {userDao.save();System.out.println("这是UserServiceImpl类的save()方法");}}beans.xml
<?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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 添加基于注解的命名空间:添加:xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"--><!-- <context:annotation-config/>这个配置隐式注册了多个对注解进行解析处理的处理器--><context:annotation-config/><bean id="userDao1" class="com.csii.dao.UserDaoImpl" /><bean id="userService" class="com.csii.service.UserServiceImpl"><!-- <property name="userDao" ref="userDao"></property> --></bean></beans>App.java
package com.csii.app;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.csii.service.IUserService;public class App {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");IUserService bean = (IUserService) ctx.getBean("userService");bean.save();}}
指定Bean的初始化方法和销毁方法(注解)
Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法。
UserServiceImpl.java
package com.csii.service;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import javax.annotation.Resource;import com.csii.dao.IUserDao;public class UserServiceImpl implements IUserService {/** * 完成对对象注入的操作(注解) * @Resource 注解标注在字段上 * 先按照属性名称userDao到spring容器中查找<bean id="userDao">对应的类, * *如果找到了,就直接使用id节点对应的class类,通过java的反射机制将class类型给IUserDao userDao的属性 * *如果没有找到,就按照类型IUserDao到spring容器中进行匹配,匹配bean节点对应的class * *如果找到了,就返回该bean节点对应的类型,通过java的反射机制将class类型给IUserDao userDao的属性 * *如果没有找到,则抛出异常 * @Resource(name="userDao"):此时表示只能按照名称进行匹配。 *///@Resourceprivate IUserDao userDao;public IUserDao getUserDao() {return userDao;}/** * * 完成对对象注入的操作(注解) * * @Resource注解标注在字段上 * 先按照参数名称userDao到spring容器中查找<bean id="userDao">的对应类, * * 如果找到了,就直接使用id节点对应的class类,通过参数将形参转换为实参将class类型给set方法的参数IUserDao userDao的属性 * * 如果没有找到,就按照参数类型IUserDao到spring容器中进行匹配,匹配bean节点对应的class * * 如果找到了,就返回该bean节点对应的类型,通过参数将形参转换为实参将class类型给set方法的参数IUserDao userDao的属性 * * 如果没有找到,则抛出异常 * @Resource(name = "userDao"):此时表示只能按照名称进行匹配 */@Resource(name="userDao")public void setUserDao(IUserDao userDao) {this.userDao = userDao;}public UserServiceImpl() {super();System.out.println("这是UserServiceImpl类的构造方法");}@Overridepublic void save() {userDao.save();System.out.println("这是UserServiceImpl类的save()方法");}//初始化@PostConstructpublic void init(){System.out.println("这是init方法");}//销毁@PreDestroypublic void destory(){System.out.println("这是destory方法");}}
0 0
- 重温Spring之旅3——装配Bean(手工装配:使用注解方式)
- 重温Spring之旅3——装配Bean(手工装配:使用xml的方式)
- Spring注解方式装配Bean
- Spring 使用注解装配Bean
- Spring入门——Bean装配之Autowired注解
- Spring-IOC装配Bean(注解方式)
- Spring框架(3)---IOC装配Bean(注解方式)
- Spring框架(3)---IOC装配Bean(注解方式)
- Spring框架(3)---IOC装配Bean(注解方式)
- Spring学习笔记—Spring之旅 . -----装配Bean
- Bean的装配方式--注解装配
- Spring Bean装配之Autowired注解说明-3
- Spring Bean装配之基于Java的容器注解说明——@Bean
- Spring Bean装配之基于Java的容器注解说明——@Bean和@Scope
- Spring(3、基于注解装配Bean)
- Spring Bean装配之基于Java的容器注解说明——基于泛型的自动装配
- Spring依赖注入——手工装配(XML方式)
- Spring之装配bean的方式
- 通过 Navigation View 创建导航抽屉
- TCP三次握手和四次挥手以及缺陷(详细)
- 利用SeekBar实现简单音乐播放器
- NEFU 1215
- C#射击类小游戏简单思路及代码
- 重温Spring之旅3——装配Bean(手工装配:使用注解方式)
- linux下安装oracle时,swapTotal显示0Kb
- solr删除数据的3种方便快捷的方式
- adb logcat的作用和用法初入门
- 2017考研随想
- webuploader 模态框 ueditor 显示问题
- ajax-传对象给后台
- 进程管理----进程与线程(一)
- ajax-传数组给后台