JAVA框架 Spring 注解注入
一、首先需要引入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 注解注入的更多相关文章
- JAVA框架 Spring 依赖注入
一:介绍 情景:我们在给程序分层的时候:web层.业务层.持久层,各个层之间会有依赖.比如说:业务层和持久层,业务层的代码在调用持久层的时候,传统方式:new 持久层类. 进而进行调用,这种方式会导致 ...
- Java框架spring 学习笔记(十四):注解aop操作
回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- spring注解注入:<context:component-scan>以及其中的context:include-filter>和 <context:exclude-filter>的是干什么的?
转自:https://www.cnblogs.com/vanl/p/5733655.html spring注解注入:<context:component-scan>使用说明 sprin ...
- 使用Spring注解注入属性
本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos ...
- JAVA框架 Spring AOP注解
一.准备工作: 1)导入jar包: 4个jar包. 2)约束:(spring需要所有的约束)有IOC约束和AOP 还有事务(tx)以及注解注入的约束(context). <?xml versio ...
- spring注解注入:<context:component-scan>使用说明
spring从2.5版本开始支持注解注入,注解注入可以省去很多的xml配置工作.由于注解是写入java代码中的,所以注解注入会失去一定的灵活性,我们要根据需要来选择是否启用注解注入. 在XML中配置了 ...
- spring注解注入:<context:component-scan>详解
spring从2.5版本开始支持注解注入,注解注入可以省去很多的xml配置工作.由于注解是写入java代码中的,所以注解注入会失去一定的灵活性,我们要根据需要来选择是否启用注解注入. 我们首先看一个注 ...
随机推荐
- JSP学习笔记(6)-使用数据库
1.连接MySQL数据库 1.1.JDBC JDBC(Java Database Connectivity)提供了访问数据库的API,由一些Java类和接口组成,是Java运行平台核心库中的一部分.用 ...
- Windows平台如何部署scrapy
0.安装Anaconda 这个不教了,自己去Anaconda官网上下个安装包,装上就好. https://www.anaconda.com/distribution/ 1.使用Anaconda创建一个 ...
- django-强大的ORM
一.ORM简介 (对象关系映射:object relationship mapping) MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的 ...
- 设计模式(17)--Mediator(中介者模式)行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以 ...
- promise的理解和应用
老铁们,我又满血复活了,今天我准备来吹一波我对promise,如有错吴请直接指出,明白了吗?话不多说开始吧 首先我们需要知道啥叫promise,我问了问大佬,他说这个东西是 异步操作的同步代码(but ...
- hihocoder [Offer收割]编程练习赛12 [1495] ---- 矩形分割
原题链接 矩形分割 算法分析: 解决该题要用到"并查集"的思想. 这里有一篇不错的博客介绍并查集: 并查集(Union-Find)算法介绍 记 int total=N*M,这里会有 ...
- 【three.js练习程序】鼠标滚轮缩放
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- jQuery EasyUI datagrid列名包含特殊字符会导致表格错位
首先申明:本文所述的Bug存在于1.3.3以及更高版本中,其它低版本,本人未测试,太老的版本不想去折腾了. 洒家在写前端的SQL执行工具时,表格用了 jQuery EasyUI datagrid,因为 ...
- SqlServer 一个查询语句导致tempdb增大55G(转载)
SqlServer 一个查询语句导致tempdb增大55G 今天操作着服务器,突然右下角提示“C盘空间不足”! 吓一跳!~ 看看C盘,还有7M!!!这么大的C盘空间怎么会没了呢?搞不好等下服务器会动不 ...
- Django之url映射
url映射的作用 根据Django的MTV模式,url的映射是根据用户输入或传送而来的url路径,来进行区分去执行相应的view函数来响应用户的操作. url映射的方式 Django项目的创建后,会自 ...