Spring-DI-注解
来源:互联网 发布:淘宝开放api 编辑:程序博客网 时间:2024/05/22 17:19
注解
* 必须依赖于类中的某一个部分
* 注解应该在类的哪些部位出现
* 自定义注解
* 了解jdk内置的注解
* 解析注解
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"><!-- 1、导入命名空间 xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 2、到入依赖注入的注解解析器 <context:annotation-config></context:annotation-config>3、把student和person导入进来 --><context:annotation-config></context:annotation-config><bean id="student" class="cn.itcast.spring0909.di.annotation.Student"></bean><bean id="person" class="cn.itcast.spring0909.di.annotation.Person"></bean></beans>
/** * 原理 * * 启动spring容器,并且加载配置文件 * * 会为student和person两个类创建对象 * * 当解析到<context:annotation-config></context:annotation-config> * 会启动依赖注入的注解解析器 * * 会在纳入spring管理的bean的范围内查找看哪些bean的属性上有@Resource注解 * * 如果@Resource注解的name属性的值为"",则会把注解所在的属性的名称和spring容器中bean的id进行匹配 * 如果匹配成功,则把id对应的对象赋值给该属性,如果匹配不成功,则按照类型进行匹配,如果再匹配不成功,则报错 * * 如果@Resource注解的name属性的值不为"",会把name属性的值和spring容器中bean的id做匹配,如果匹配 * 成功,则赋值,如果匹配不成功 ,则直接报错 * 说明: * 注解只能用于引用类型 * @author Administrator * */public class PersonTest extends SpringHelper{static{path = "cn/itcast/spring0909/di/annotation/applicationContext.xml";}@Testpublic void test(){ClassPathXmlApplicationContext applicationContext = (ClassPathXmlApplicationContext)context;Person person = (Person)applicationContext.getBean("person");person.say();applicationContext.close();}}
package cn.itcast.spring0909.di.annotation;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;public class Person {//@Autowired//按照类型进行匹配//@Qualifier("student")@Resource(name="student")private Student studen;@Resource// 这行会报错(所以注解只能用于引用类型)private Long pid;public void say(){this.studen.say();}@PostConstructpublic void init(){System.out.println("init");}public Person() {super();this.pid=1L;}@PreDestroypublic void destroy(){System.out.println("destroy");}}
package cn.itcast.spring0909.di.annotation;public class Student {public void say(){System.out.println("student");System.err.println("xxxxxxxx");}}
SCAN
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"><!-- 1、导入命名空间 xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 2、启动类扫描的注解解析器3、启动依赖注入的注解解析器--><!-- component就是beanbase-package 会在base-package的值所在的包及子包下扫描所有的类 --><context:component-scan base-package="cn.itcast.spring0909.scan"></context:component-scan></beans>
/** * 原理 * * 启动spring容器,加载配置文件 * * spring容器解析到 * <context:component-scan base-package="cn.itcast.spring0909.scan"></context:component-scan> * * spring容器会在指定的包及子包中查找类上是否有@Component * * 如果@Component注解没有写任何属性 * @Component * public class Person{ * * } * == * <bean id="person" class="..Person"> * 如果@Component("aa") * @Component * public class Person{ * * } * == * <bean id="aa" class="..Person"> * * 在纳入spring管理的bean的范围内查找@Resource注解 * * 执行@Resource注解的过程 * 说明: * xml效率比较高,但是书写比较麻烦 * 注解效率比较低,书写比较简单 * @author Administrator * */public class PersonTest extends SpringHelper{static{path = "cn/itcast/spring0909/scan/applicationContext.xml";}@Testpublic void test(){Person person = (Person)context.getBean("perso");person.say();}}
@Component("perso")//加上这个注解 就可以让di容器自动扫描了public class Person {@Resource(name="student")private Student studen;private Long pid;public void say(){this.studen.say();}@PostConstructpublic void init(){System.out.println("init");}@PreDestroypublic void destroy(){System.out.println("destroy");}}
@Componentpublic class Student {public void say(){System.out.println("student");}}
mvc注解
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"><context:component-scan base-package="cn.itcast.spring0909.mvc.spring.annotation"></context:component-scan></beans>
/** * 如果一个类中有基本类型,并且基本类型是用spring的形式赋值的,这个时候,该类必须用xml来完成,不能用注解 * @author Administrator * */@Controller("personAction")public class PersonAction {@Resourceprivate PersonService personService;public void savePerson(){this.personService.savePerson();}}
public interface PersonDao {public void savePerson();}
@Repository("personDao")public class PersonDaoImpl implements PersonDao{@Overridepublic void savePerson() {// TODO Auto-generated method stubSystem.out.println("save person");}}
public interface PersonService {public void savePerson();}
@Servicepublic class PersonServiceImpl implements PersonService{@Resource(name="personDao")private PersonDao personDao;@Overridepublic void savePerson() {// TODO Auto-generated method stubthis.personDao.savePerson();}}
public class PersonTest extends SpringHelper{static{path = "cn/itcast/spring0909/mvc/spring/annotation/applicationContext.xml";}@Testpublic void test(){PersonAction personAction = (PersonAction)context.getBean("personAction");personAction.savePerson();}}
0 0
- Spring-DI-注解
- Spring DI 注解
- Spring 注解的DI
- Spring实例化(DI)注解形式
- Spring学习心得(7)-- DI注解
- spring mvc 扫描注解(ioc,di)
- Spring--IoC--基于注解的DI-@Scope
- Spring 基于注解DI的注入
- spring注解入门之IOC,DI
- Spring--IoC--基于注解的DI-@Component相关注解
- DI注解
- spring使用注解进行DI(依赖)注入
- Spring IoC 控制反转 DI依赖注入 以及常用注解
- Spring--IoC--基于注解的DI-基本使用
- Spring回顾(二)注解实现IoC和DI
- Spring详解(四)------注解配置IOC、DI
- Xml DI 和 注解DI
- spring(DI)注解的使用、类扫描的注解、Xml的继承、注解的继承
- 如何在mac上安装git
- 自学完成的第一个Java版猜拳游戏
- 1.文件操作之,文件流读取文本
- 让AtomicLong再飞一会儿
- Ubuntu 13.04安装搜狗输入法
- Spring-DI-注解
- OpenWRT添加模块 实例
- AngularJS v1.2.13 兼容 IE7 $sce:iequirks
- POJ 1125 Stockbroker Grapevine
- win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
- iptables规则的查看、添加、删除和修改
- struts2访问时报错no action的问题
- 职责链模式
- libnids 中ipfrag重组的实现机制