07 Spring框架 依赖注入(四)基于注解的依赖注入
来源:互联网 发布:visio软件破解版 编辑:程序博客网 时间:2024/05/17 07:40
前面几节我们都在使用xml进行依赖的注入,但是在实际的开发中我们往往偏爱于使用注解进行依赖注入,因为这样更符合我们人的思维,并且更加快捷,本节就来讲述Spring基于注解的依赖注入:
信息注入注解
- @Component注解:表明当前类为一个组件(bean)
- @Value注解:为bean注入值
- @Autowired注解 :为bean注入其他bean(byType方式)
- @Qualifier注解:与Autowired注解联用实现byName方式注入
- @Resource注解:这个不是Spring提供的注解,这个是jdk提供的注解,要求jdk版本1.6以上,这个注解可以实现Autowired和Resource的功能。当直接注解@Resource时起到Autowired功能(byType),当加上参数@Resource(name=”“)的时候,起到@Autowired和@Qualifier联合使用的功能(byName)
@Component("book")public class Book { @Value("Java技术") private String bname; @Value("20142055") private int bnumber; //这个注解默认的是使用byType方式注入,加上@Qualifier("pub")可以实现byName方式注入 @Autowired private publisher bpub; //省略了setter,toString方法}
@Component("pub")public class publisher { @Value("清华大学出版社") String name; @Value("北京") String address; //省略了setter,toString方法}
//测试类 @Test public void Test01() { String resource = "com/test/annoDi/applicationContext.xml"; ApplicationContext ac = new ClassPathXmlApplicationContext(resource); Book book = (Book)ac.getBean("book"); System.out.println(book); }
你以为这样就行了嘛?
no no no~ 既然我们再测试类中注册的是一个xml 文件,那么我们的容器又是怎么找到我们的注解的呢?
所以我们要在xml文件中加上这样一行代码:
<context:component-scan base-package="com.test.annoDi"/>
如果你这样添加,那么你的xml文件肯定会报错的,因为我们还要添加相应的约束:具体的约束文件我们可以到我们下载的Spring jar包中找约束(https://repo.spring.io/下载地址):
spring-framework-4.2.1.BUILD-SNAPSHOT-dist/spring-framework-4.2.1.BUILD-SNAPSHOT/docs/spring-framework-reference/html/xsd-configuration.html
到这个页面下找到:
里面有相应的约束文件:
<?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 http://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.test.annoDi"/></beans>
这样就就可以完成我们的基于注解的依赖注入了。
base-package里面的路径写法:
我们可以单独扫描一个包内的内容,但是在实际开发当中我们需要扫描很多的包,我们就可以使用com.test.* 这样的的格式扫描com.test下的所有子包。或者com.test扫描这个包和它的所有子包。
与@Component注解功能相同的注解还有三个:
- Controller:注解在处理器上,在SpringMVC上会用到
- Service:注解在Service实现类上
- Respository:注解在DAO实现类上
就功能而言(现在)这三个注解和Component注解的功能是一样的,现在这样分类只是用以区别这几个注解用到的场合。
除了信息注入的注解,还有:
初始化后方法和销毁前方法注解
- @PostConstruct:被注解的方法为初始化完成方法
- @PreDestroy:被注解的方法为销毁前方法
@PostConstruct public void afterinitial() { System.out.println("初始化后"); } @PreDestroy public void beforedestory() { System.out.println("销毁前"); }
使用Java类进行信息注入
除了xml和一般注解配置,Spring还提供了Java配置,什么叫java配置,即创建一个类来进行信息的注入,它和注解配置相似,不同的是它不是在bean的实现类中进行注解,而是新创建一个类进行配置:
这里涉及到了两个注解:
- @Configuration
- @Bean
public class Book { private String bname; private int bnumber; private publisher bpub; //省略了构造函数,toString方法,setter方法。}
public class publisher { String name; String address; //省略了构造函数,toString方法,setter方法。}
@Configuration//用来声明这个是由Java来配置public class JavaConfig { //声明这个是一个bean,并且通过byType自动注入 //这里也可以改为Autowire.BY_NAME,但是自动装配的bean的name需 //要和当前bean的命名一致 //例如使用byName,下面的@Bean(name="pub")应该改成 //@Bean(name="bpub")和Book类private publisher bpub; //相同 @Bean(name="book",autowire=Autowire.BY_TYPE) public Book createBook() { return new Book("java基础",20141025); } @Bean(name="pub") public publisher createPublisher() { return new publisher("清华大学出版社","北京"); }}
在Spring的主配置文件中我们采用和注解配置相同的方式:
<context:component-scan base-package="com.test.annoDiJavaConfig"/>
使用Java类进行配置一定记住bean的实现类需要有构造函数。
Ioc总结:
这一节我们的IoC就说完了,xml配置和注解配置各有优点,xml在系统上线后,如果需要改动,直接改配置文件即可,不需要改动源码重新编译;注解在开发中更加便捷,更符合我们的开发习惯(注解不需要setter方法和构造函数)。
但是在实际开发中,这两种方法我们都会使用,因为xml配置的优先级比较高(高于注解),所以我们在开发中我们先用注解开发,如果在后期需要改动,就使用xml进行改动,所以在开发中我们应该保留setter方法和构造函数,以便我们后期的改动。
- 07 Spring框架 依赖注入(四)基于注解的依赖注入
- Spring依赖注入的简单示例(基于注解配置)
- spring依赖注入的注解
- Spring依赖注入:注解注入
- Spring的依赖注入(基于XML)
- Spring——基于注解方式的依赖注入
- Spring揭秘(七)——基于注解的依赖注入
- spring注解基于Annotation的依赖注入配置笔记
- Spring 框架依赖注入
- spring框架依赖注入
- Spring框架(三)依赖注入之注解方式
- Spring各种依赖注入注解的区别
- Spring各种依赖注入注解的区别
- spring-依赖注入的注解配置
- Spring各种依赖注入注解的区别
- spring的依赖注入 注解版
- Spring:依赖注入(注解方式)
- spring annotation注解 依赖注入
- centos7 jdk8配置
- openstack环境中安装mistral
- sql删除主键并添加主键
- tensorflow+win7+Anaconda配置
- double保留两位小数
- 07 Spring框架 依赖注入(四)基于注解的依赖注入
- LoadRunner脚本编写之二(转载至虫师博客)
- 无人驾驶汽车系统入门(七)——基于传统计算机视觉的车道线检测(2)
- 端口没有被占用却提示Several ports (8005, 8080, 8009) required by Tomcat
- 单机Compose编排pbspro_maya
- js预处理和闭包
- BZOJ2006 [NOI2010]超级钢琴 【堆 + RMQ】
- Servlet
- 热修复——Tinker的集成与使用