一、首先需要引入jar包:spring-aop-4.2.4.RELEASE.jar。(在spring解压包libs内)。

二、如果注解方式注入依赖的对象,需要引用新的约束。

内的:xsd-configuration.html。打开网页中的:the context schema 粘贴复制:

 <?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"> <!-- bean definitions here --> </beans>

写接口和实现类:

 package jd.com.inject;

 public interface Indemo {
void save();
}

实现类:需要写注解:@Component(value = "indemo") 其中value是配置文件中的id值,在调用的时候执行方法getbean(id值)调用就是这个值。

 package jd.com.inject;

 import org.springframework.stereotype.Component;

 @Component(value = "indemo")
public class indemoIpl implements Indemo {
@Override
public void save() {
System.out.println("调用业务层。");
}
}

配置文件(applicationContenxt.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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> <context:component-scan base-package="jd.com" /> </beans>

其中:

<context:component-scan base-package="jd.com" /> 其中base-package是需要扫描的包。需要注意:这里写的是jd.com而不是完整的包。这样涵盖所有包。

测试类:
 package jd.com.inject;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestDemo {
@Test
public void testdemo(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
indemoIpl in= (indemoIpl) ac.getBean("indemo");
in.save();
} }
这样就是实现注解方式注入。

三、上面是通用注解,但是spring为我们提供web层:Controller、业务层:Service、持久层:Repository   spring在后续版本会对其进行增强注解。也为更清晰标注每层。
也就是上面可以写@Service注解。注解内的key也是value。
 package jd.com.inject;

 import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; @Service(value = "indemo")
public class indemoIpl implements Indemo {
@Override
public void save() {
System.out.println("调用业务层。");
}
}

四:依赖注解:
1)属性依赖注入:
使用注解:@Value 只能注入基本数据类型和字符串。不需要设置set方法,但是需要字段。
 package jd.com.inject;

 import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; @Service(value = "indemo")
public class indemoIpl implements Indemo { @Value(value = "属性值")
private String a; @Override
public void save() {
System.out.println("调用业务层。"+a);
}
}
其中value是属性的值。不同于其他的注解,其他注解是getbean调用的name值。
2)引用注入:
三种方式:
1、@Autowired 自动载入,自动匹配类型和名称无关。但是一个接口如果有多个接口的话,载入类不一定是我们想要的。(不推荐使用)
 package jd.com.inject;

 import jd.com.Dao.DaoIn;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service(value = "indemo")
public class indemoIpl implements Indemo { //自动载入
@Autowired
private DaoIn daoIn; @Value(value = "属性值")
private String a; @Override
public void save() {
System.out.println("调用业务层。"+a);
daoIn.save();
}
}

2、Qualifier强制按名称注入,需要和Autowire一起使用才生效。
 package jd.com.inject;

 import jd.com.Dao.DaoIn;
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;
import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service(value = "indemo")
public class indemoIpl implements Indemo { //强制按名字注入
@Autowired
@Qualifier(value = "dao")
private DaoIn daoIn; @Value(value = "属性值")
private String a; @Override
public void save() {
System.out.println("调用业务层。"+a);
daoIn.save();
}
}
3、@Resource(name = "dao"):其中需要注意这里的key是name不是value。而且不属于spring框架提供的是由:javax.annotation.Resource 提供。name的值是被依赖类注入的时候的value属性值。
  还需要设置属性字段。(推荐使用)
     @Resource(name = "dao")
private DaoIn daoIn;
完整代码:
 package jd.com.inject;

 import jd.com.Dao.DaoIn;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service(value = "indemo")
public class indemoIpl implements Indemo { @Resource(name = "dao")
private DaoIn daoIn; @Value(value = "属性值")
private String a; @Override
public void save() {
System.out.println("调用业务层。"+a);
daoIn.save();
}
}
Dao层:
 package jd.com.Dao;

 import org.springframework.stereotype.Repository;

 @Repository(value = "dao")
public class DaoImpl implements DaoIn {
@Override
public void save() {
System.out.println("数据层数据已保存");
}
}

												

JAVA框架 Spring 注解注入的更多相关文章

  1. JAVA框架 Spring 依赖注入

    一:介绍 情景:我们在给程序分层的时候:web层.业务层.持久层,各个层之间会有依赖.比如说:业务层和持久层,业务层的代码在调用持久层的时候,传统方式:new 持久层类. 进而进行调用,这种方式会导致 ...

  2. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  3. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

  4. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  5. spring注解注入:<context:component-scan>以及其中的context:include-filter>和 <context:exclude-filter>的是干什么的?

    转自:https://www.cnblogs.com/vanl/p/5733655.html spring注解注入:<context:component-scan>使用说明   sprin ...

  6. 使用Spring注解注入属性

    本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos ...

  7. JAVA框架 Spring AOP注解

    一.准备工作: 1)导入jar包: 4个jar包. 2)约束:(spring需要所有的约束)有IOC约束和AOP 还有事务(tx)以及注解注入的约束(context). <?xml versio ...

  8. spring注解注入:<context:component-scan>使用说明

    spring从2.5版本开始支持注解注入,注解注入可以省去很多的xml配置工作.由于注解是写入java代码中的,所以注解注入会失去一定的灵活性,我们要根据需要来选择是否启用注解注入. 在XML中配置了 ...

  9. spring注解注入:<context:component-scan>详解

    spring从2.5版本开始支持注解注入,注解注入可以省去很多的xml配置工作.由于注解是写入java代码中的,所以注解注入会失去一定的灵活性,我们要根据需要来选择是否启用注解注入. 我们首先看一个注 ...

随机推荐

  1. Linux常用基本命令( rmdir, rm, mv )

    1,rmdir,一个很鸡肋的命令,只能删除空目录 ghostwu@dev:~/linux/cp$ ls .txt .txt a a2 a3 ghostwu@dev:~/linux/cp$ rmdir ...

  2. Python 并发编程(管道,事件,信号量,进程池)

    管道 Conn1,conn2 = Pipe() Conn1.recv() Conn1.send() 数据接收一次就没有了 from multiprocessing import Process,Pip ...

  3. [USACO18FEB]Slingshot

    题意可化为: 在二维平面中有n个点,坐标为\((x_i,y_i)\),点权为\(t_i\). 现有m个询问,每次给定点\((x,y)\),求\(\min\{|x-x_i|+|y-y_i|+t_i,|y ...

  4. BZOJ3351: [ioi2009]Regions(根号分治)

    题意 题目链接 Sol 很神仙的题 我们考虑询问(a, b)(a是b的祖先),直接对b根号分治 如果b的出现次数\(< \sqrt{n}\),我们可以直接对每个b记录下与它有关的询问,这样每个询 ...

  5. promise 拙见

    一,promise是什么? promise 是最早由社区提出和实现是一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和强大. ES6 将其写进了语言标准,统一了用法,原生提供了 p ...

  6. 【代码笔记】iOS-长条label

    一,效果图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...

  7. SpringBoot简介、特点

    ##SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包.SpringBoot整合了所有的框架,并通过一行简单的main方法启动应用. ##微框 ...

  8. 学习MVC之租房网站(一)-项目概况

    这儿的MVC是ASP.NET MVC,只用过C#一种语言,后面就直接称呼为MVC了. 一年多没接触MVC后,现在想用MVC做个网站,觉得特别吃力,以前学的仅仅是皮毛,所以闲置了一年后,MVC知识就重新 ...

  9. android 性能优化 -- 启动过程 冷启动 热启动

    一.应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动. 2.热启动:当启 ...

  10. CentOS7安装mysql后无法启动服务,提示Unit not found

    首发日期: 2018-01-30 现象: 在centOS7中启动MySQL数据库提示: Failed to start mysqld.service: Unit not found [明明已经安装了, ...