一、首先需要引入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. HDU1814(2-SAT)

    Peaceful Commission Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  2. 用vue写一个仿app下拉刷新的组件

    如果你用vue弄移动端的页面,那么下拉刷新还是比较常见的场景,下面来研究如何写一个下拉刷新的组件(先上图); 由于节省大家的时间,样式就不贴出来了. html结构也不必介绍了,直接看代码吧-.- &l ...

  3. 从零开始学习html(十)CSS格式化排版——下

    六.文字排版--删除线 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&q ...

  4. windows10 java环境变量设置

    由于安装的是jdk1.8所以不需要配置classpath了,只需要配置java_home和path即可. 我的电脑 -> 右键属性 -> 高级系统设置 -> 高级 -> 环境变 ...

  5. 跨域cors中如何传递cookie(前端为什么无法向后端传递cookie?)

    没有跨域 后端server只要在回应头部‘set-cookie’,那么就会有cookie产生并保存在客户端client. 等到client再次向后端server发送请求时浏览器的机制就会自动携带coo ...

  6. JavaScript Data.parse()转化时间戳安卓和ISO不兼容

    Data.parse()获取时间戳,在Android是没有问题的,但是在ISO就不行了,原因在于转化成时间戳的时间格式不一样. Android的格式是如“2017-12-12 12:12:12”,IS ...

  7. 【转】vs2010打开qt的.pro文件时错误解决办法

    注意:qt creator工程中一般都已经存在*.pro文件,里面存放着一些自己配置的包含头文件和lib库文的信息,最好不要再重新使用qmake -project生成,若重新生成,则可能要重新增加配置 ...

  8. bootstrap使用基础

    1.为了适应跨屏浏览,Bootstrap为单元格预定义了4种class ,分别对应于手机.ipad.笔记本电脑.台式机. <div class="row"> <d ...

  9. 纯js实现页面返回顶部的动画

    啥也不说了,直接上代码 var scrollTop = document.body.scrollTop; document.body.style.marginTop = -scrollTop + 'p ...

  10. Jboss7.1 local EJB lookup problem

    We are trying to lookup for an Local EJB in JBoss7.1, but we get an ClassCast Exception. This local ...