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代码中的,所以注解注入会失去一定的灵活性,我们要根据需要来选择是否启用注解注入. 我们首先看一个注 ...
随机推荐
- POJ2387(KB4-A)
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 54716 Accepted ...
- Mysql数据库 的库表简易操作
一. 库的操作 1.创建数据库 创建数据库: create database 库名 charset utf8; charset uft8 可选项 1.2 数据库命名规范: 可以由字母.数字.下划 ...
- node 搭建静态服务
对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解. 基本功能 不急着写下第一行代码,而是先梳理一下就基本功能而言有哪 ...
- go语言练习:go实现md5
package main import ( "crypto/md5" "fmt" ) func main() { md5_ob := md5.New() md5 ...
- 从零自学Java-2.初步理解Java程序使如何工作的
1.学习Java应用程序是如何工作的 2.构成一个应用程序 3.向应用程序传递参数 4.学习Java程序是如何组织的 5.在应用程序中创建一个对象 程序Root:输出225的正平方根 package ...
- LeeTCode题解之Remove Duplicates from Sorted List
1.题目描述 2.问题分析 对于链表中的每一个元素,找到其后面和它不相等的第一个元素,然后指向该元素. 3.代码 ListNode* deleteDuplicates(ListNode* head) ...
- android编写测试类
由于网上很多教程,我就不多说.在这里我就说说我遇到的问题. 在android studio编写单元测试类中,在androidTest包下编写了两个类,分别如下 import junit.framewo ...
- 您还在用下一步下一步的方式安装SQLSERVER和SQLSERVER补丁吗?
您还在用下一步下一步的方式安装SQLSERVER和SQLSERVER补丁吗? 介绍 假如你有50台服务器需要安装SQLSERVER,如果你用下一步下一步的方式,用远程桌面不停切换,那个效率... 大家 ...
- UNIX高级环境编程(15)进程和内存分配 < 故宫角楼 >
故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详. 首先,了解一下进程的基本概念,进程在内存中布局和内容. 此外,还需要知道运行时是如何为动态数据结构(如链表和二叉树)分配额外内 ...
- time模块案例演示
案例01: 2008年8月8日20:08:08 往后88,888,888秒是哪天?星期几? 日期->时间戳(浮点数)->可以做数学运算 演示: import time # 构造日期的元组, ...