Spring框架第四篇之基于注解的DI注入
一、说明
与@Component注解功能相同,但意义不同的注解还有三个:
1)@Repository:注解在Dao实现类上
2)@Service:注解在Service实现类上
3)@Controller:注解在SpringMVC的处理器上
Bean作用域:
@Scope("prototype"):用于指定对象创建模式,可以是单例模式或者原型模式,默认是singleton
基本类型属性注入:
@Value
@Autowired:byType方式的注解式注入,即根据类型注解
@Qualifier("mySchool"):byName方式的注解式注入,在使用@Qualifier时必须与@Autowired联合使用
域属性注解:
@Resource:不加name属性则为byType方式的注解式注入,但前提是注入的对象只能有一个
@Resource(name="mySchool"):byName方式的注解式注入
Bean的生命始末:
@PostConstruct:当前Bean初始化刚完毕
@PreDestroy:当前Bean即将被销毁
@Configuration:表示当前类充当Spring容器,即所有的Bean将由这个类来创建
注意:
在举例之前声明几个问题:
1、注解需要依赖spring-aop-4.3.9.RELEASE.jar包,所以需要导入依赖包。
2、使用注解方式注入,配置文件需要添加约束头文件:
- <?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">
也可以自己从Spring的说明文档中找到此头文件:
3、如果使用到了SpringJUnit4测试,则还需要导入spring-test-4.3.9.RELEASE.jar包
二、举例
1、首先创建一个School类:
- package com.ietree.spring.basic.annotation.demo1;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- @Component("mySchool")
- public class School {
- @Value(value = "清华大学")
- private String name;
- public School() {
- super();
- }
- public School(String name) {
- super();
- this.name = name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public String toString() {
- return "School [name=" + name + "]";
- }
- }
创建Student类:
- package com.ietree.spring.basic.annotation.demo1;
- 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;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- /**
- * 说明:
- * 与@Component注解功能相同,但意义不同的注解还有三个:
- * 1)@Repository:注解在Dao实现类上
- * 2)@Service:注解在Service实现类上
- * 3)@Controller:注解在SpringMVC的处理器上
- *
- * Bean作用域:
- * @Scope("prototype"):用于指定对象创建模式,可以是单例模式或者原型模式,默认是singleton
- *
- * 基本类型属性注入:
- * @Value
- *
- * @Autowired:byType方式的注解式注入,即根据类型注解
- * @Qualifier("mySchool"):byName方式的注解式注入,在使用@Qualifier时必须与@Autowired联合使用
- *
- * 域属性注解:
- * @Resource:不加name属性则为byType方式的注解式注入,但前提是注入的对象只能有一个
- * @Resource(name="mySchool"):byName方式的注解式注入
- *
- * Bean的生命始末:
- * @PostConstruct:当前Bean初始化刚完毕
- * @PreDestroy:当前Bean即将被销毁
- */
- //@Scope("prototype")
- @Component("myStudent")
- public class Student {
- @Value(value = "小明")
- private String name;
- @Value(value = "25")
- private int age;
- // @Autowired
- // @Qualifier("mySchool")
- // @Resource(name="mySchool")
- @Resource
- private School school;// 对象属性,也叫做域属性
- public Student() {
- super();
- }
- public Student(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public void setName(String name) {
- System.out.println("执行setName()");
- this.name = name;
- }
- public void setAge(int age) {
- System.out.println("执行setAge()");
- this.age = age;
- }
- public void setSchool(School school) {
- this.school = school;
- }
- @Override
- public String toString() {
- return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
- }
- @PostConstruct
- public void initAfter(){
- System.out.println("当前Bean初始化刚完毕");
- }
- @PreDestroy
- public void preDestroy(){
- System.out.println("当前Bean即将被销毁");
- }
- }
创建MyJavaConfig类:
- package com.ietree.spring.basic.annotation.demo1;
- import org.springframework.beans.factory.annotation.Autowire;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- /**
- * @Configuration:表示当前类充当Spring容器,即所有的Bean将由这个类来创建
- */
- @Configuration
- public class MyJavaConfig {
- @Bean(name="mySchool")
- public School mySchoolCreator(){
- return new School("清华大学");
- }
- // autowire=Autowire.BY_TYPE:指从当前类这个容器中查找与域属性的类型具有is-a关系的Bean
- // autowire=Autowire.BY_NAME:指从当前类这个容器中查找与域属性同名的Bean
- @Bean(name="myStudent", autowire=Autowire.BY_TYPE)
- public Student myStudentCreator(){
- return new Student("小明", 25);
- }
- }
创建配置文件:
- <?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">
- <!-- 扫描 com.ietree.spring.basic.annotation.demo1这个包及其子包 -->
- <context:component-scan base-package="com.ietree.spring.basic.annotation.demo1"/>
- <!-- 扫描 com.ietree.spring.basic这个包的子包 -->
- <context:component-scan base-package="com.ietree.spring.basic.*"/>
- </beans>
创建测试类:
- package com.ietree.spring.basic.annotation.demo1;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations="classpath:com/ietree/spring/basic/annotation/demo1/applicationContext.xml")
- public class MyTest {
- @Autowired
- private Student student;
- @Test
- public void test01() {
- String resource = "com/ietree/spring/basic/annotation/demo1/applicationContext.xml";
- ApplicationContext ctx = new ClassPathXmlApplicationContext(resource);
- School school = (School) ctx.getBean("mySchool");
- System.out.println(school);
- Student student = (Student) ctx.getBean("myStudent");
- System.out.println(student);
- ((ClassPathXmlApplicationContext)ctx).close();
- }
- public void test02(){
- System.out.println(student);
- }
- }
注意:如果配置了XML,同时又配置了注解,那么程序会首先选择XML配置创建对象。
Spring框架第四篇之基于注解的DI注入的更多相关文章
- Spring框架第三篇之基于XML的DI注入
一.注入分类 Bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化.初始化是由容器自动完成的,称为注入.根据注入方式的不同,常用的有两类:设值注入.构造注入.实现特定接口注入 ...
- SSM-Spring-07:Spring基于注解的di注入
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 注解: 说起注解,哇哦,每个人都或多或少的用到过 像什么@Overried,@Test,@Param等等之前就 ...
- 07 Spring框架 依赖注入(四)基于注解的依赖注入
前面几节我们都在使用xml进行依赖的注入,但是在实际的开发中我们往往偏爱于使用注解进行依赖注入,因为这样更符合我们人的思维,并且更加快捷,本节就来讲述Spring基于注解的依赖注入: 信息注入注解 @ ...
- Spring的第四天AOP之注解版
Spring的第四天AOP之注解版 ssm框架 spring 在上一篇博客中,介绍了Spring的AOP的xml版本的使用,在这篇博客中,我将介绍一下,注解版的使用. 常用注解 注解 通知 @Aft ...
- Spring声明式事务管理(基于注解方式实现)
----------------------siwuxie095 Spring 声明式事务管理(基于注解方式实现) 以转 ...
- 解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题
解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题 Alternatively, create an own implementation of ...
- 使用Spring框架入门四:基于注解的方式的AOP的使用
一.简述 前面讲了基于XML配置的方式实现AOP,本文简单讲讲基于注解的方式实现. 基于注解的方式实现前,要先在xml配置中通过配置aop:aspectj-autoproxy来启用注解方式注入. &l ...
- spring框架学习(四)——注解方式AOP
注解配置业务类 使用@Component("s") 注解ProductService 类 package com.how2java.service; import org.spri ...
- Spring Cloud第四篇 | 客户端负载均衡Ribbon
本文是Spring Cloud专栏的第四篇文章,了解前三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
随机推荐
- 按SCI影响因子排序的前50人工智能期刊列表
附录二:按SCI影响因子排序的前50人工智能期刊列表 出版物名称,影响因子 IEEE TRANSACTIONS ON FUZZY SYSTEMS, 6.701 International Jou ...
- 006杰信—factory更新数据
本博客的资源全部来源于传智播客. factroy更新的执行流程和003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理差不多, 1.在jFact ...
- Spring MVC属于SpringFrameWork的后续产品
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它 ...
- Unity3D项目之 Survival Shooter 记录
1.导入资源 2.把预设文件的环境拖到场景中, 3.位置归0 4.保存场景 5.删除默认灯光,把预设灯光拖到场景中,位置归0 6.新建一个 Quad 7.旋转90度,设置缩放100,100,1 重命名 ...
- android 开发之hello world!
http://blog.sina.com.cn/s/blog_4e08922b0100nh6e.html http://blog.csdn.net/poechant/article/details/7 ...
- 微软ASP.NET网站部署指南(8):部署Code-Only更新
1. 综述 初始化部署以后,你须要继续维护和更新你的网站.本章节将向你展示一个不包含数据库改变的部署升级流程.(下一章节将展示数据库改变的部署升级流程.) 提醒:假设依据本章节所做的操作出现错误信息 ...
- thinkPHP 上传文件的中文乱码
最新版本~用了里面的上传文件类,发现在保存文件原本名称的时候当有中文名的时候保存文件会显示乱码,看了下源代码发现在Tp上传驱动那里有点问题. // if (!move_uploaded_file($f ...
- linux上限制用户进程数、cpu占用率、内存使用率
限制进程CPU占用率的问题,给出了一个shell脚本代码如下: renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > ...
- superresolution_v_2.0 Application超分辨率程序文档
SUPERRESOLUTION GRAPHICAL USER INTERFACE DOCUMENTATION Contents 1.- How to use this application. 2.- ...
- 【代码备份】原图降采样后进行NLM滤波
文件路径: 滤波算法main.m: %% 测试函数 %NLM滤波及滤波与 clc,clear all,close all; ima_ori=double(imread('F:\Users\****n\ ...