Spring注入是指在启动Spring容器载入bean配置的时候。对类变量的赋值。

两种经常使用注入方式:设值注入和构造注入

以下就这部分知识看代码以及代码中的注解:

1、首先看Spring 配置文件(怎样载入,怎么測试,《入门系列(一)》有说明。这里不再赘述)

<?xml version="1.0" encoding="UTF-8"?

>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd" > <!-- 以下是设值注入 。注意 <property name="injectionDAO" ref="injectionDAO"></property>这行代码,
无论是这里的设值还是以下的构造一定要在须要引用对象的类中加上对应的方法供Spring容器使用,实际开发中两种仅仅须要选择一种就可以 -> <!-- <bean id="injectionService" class="com.xidian.ioc.injection.service.InjectionServiceImpl"> -->
<!-- <property name="injectionDAO" ref="injectionDAO"></property> -->
<!-- </bean> --> <!--这里是构造注入 -->
<bean id="injectionService" class="com.xidian.ioc.injection.service.InjectionServiceImpl">
<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
</bean> <bean id="injectionDAO" class="com.xidian.ioc.injection.dao.InjectionDAOImpl"></bean> </beans>

2、看待注入的类:

package com.xidian.ioc.injection.dao;

public interface InjectionDAO {

	public void save(String arg);

}
package com.xidian.ioc.injection.dao;

import com.xidian.ioc.injection.dao.InjectionDAO;

public class InjectionDAOImpl implements InjectionDAO {

	public void save(String arg) {
//模拟数据库保存操作
System.out.println("保存数据:" + arg);
} }

3、Service类

package com.xidian.ioc.injection.service;

public interface InjectionService {

	public void save(String arg);

}
import com.xidian.ioc.injection.dao.InjectionDAO;

public class InjectionServiceImpl implements InjectionService {

	private InjectionDAO injectionDAO;

	//【重要】构造器注入 ,这种方法一定要有,假设在前面的spring上下文中是用构造注入的方法
public InjectionServiceImpl(InjectionDAO injectionDAO1) {
this.injectionDAO = injectionDAO1;
} //【重要】设值注入,这种方法一定要有。并且名字一定要是setXxx。不然spring容器载入不出来
public void setInjectionDAO(InjectionDAO injectionDAO) {
this.injectionDAO = injectionDAO;
} public void save(String arg) {
//模拟业务操作
System.out.println("Service接收參数:" + arg);
arg = arg + ":" + this.hashCode();
//Spring对象会自己主动调取生成对应的对象
injectionDAO.save(arg);
} }

自己主动装配(Autowiring):

byname:依据属性名自己主动装配。

byType:假设容器中存在一个与该属性名同样的bean,那么久自己主动装配。可是。假设存在多个。则会抛出异常;假设没找到则不报异常。但什么也不做。

Constructor:与byType方式类似,不同之处在于它应用于构造器參数,假设容器中没有找到与构造器类型一致的bean。那么则抛出异常。

自己主动注入,把装配的相关操作放到了详细类中,要在对应的方法中传入(该方法不能少),详细细节看代码凝视:



1、Spring的配置文件:

<?xml version="1.0" encoding="UTF-8"?

>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="constructor">
<!--自己主动注入配置。还能够有byName,byType。byName实际上是看bean的id;
而用byType则是看类型的。假设有多个同样的type则报异常;实际上用自己主动注入时,省掉的是在以下的bean注入配置。
自己主动注入,把装配的相关操作放到了详细类中,要在对应的方法中传入。--> <bean id="autoWiringService" class="com.xidian.autowiring.AutoWiringService" ></bean> <!-- 假设不是用自己主动注入的方法,这这边必须人为的进行设置,比方这边的方法:
<bean id="autoWiringService" class="com.xidian.autowiring.AutoWiringService" >
<property name="autoWiringDAO" ref="autoWiring"></property>
</bean>
--> <!-- 待注入的对象 -->
<bean class="com.xidian.autowiring.AutoWiringDAO" ></bean> </beans>

2、待自己主动注入类:

package com.xidian.autowiring;

//该类被配置到了对应的配置文件spring-autowiring.xml中。也就是待注入的对象类
public class AutoWiringDAO { public void say(String word) {
System.out.println("AutoWiringDAO : " + word);
} }



3、注入类:

package com.xidian.autowiring;

//该类被配置到了对应的配置文件其中spring-autowiring.xml
public class AutoWiringService { private AutoWiringDAO autoWiringDAO; //假设使用构造方法自己主动注入的方法,则这边必须写上这种方法。前面尽管免去的在Spring配置文件bean的设置,可是这边省不了。
public AutoWiringService(AutoWiringDAO autoWiringDAO) {
System.out.println("AutoWiringService");
this.autoWiringDAO = autoWiringDAO;
} //同上。必须有的方法 , 传入AutoWiringDAO对象。 前面尽管免去的在spring配置文件bean的设置。可是这边省不了。
public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) {
System.out.println("setAutoWiringDAO");
this.autoWiringDAO = autoWiringDAO;
} public void say(String word) {
this.autoWiringDAO.say(word);
} }

你看会了嘛?欢迎讨论 http://blog.csdn.net/code_7

Spring 新手教程(三) 注入和自己主动装配的更多相关文章

  1. Spring Security教程(三):自定义表结构

    在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项 ...

  2. Spring Security教程(三)

    在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项 ...

  3. Spring 新手教程(二) 生命周期和作用域

    以下的知识点是针对使用配置文件讲的(annotation相应标签后面文章会具体阐述) Bean的生命周期: 为什么关心这个问题? 我们使用IOC的目的就是为了让Spring IOC帮我们管理对象.从而 ...

  4. GitHub 新手教程 三,Git Bash

    1,通过 开始菜单 启动 Git Bash,或者 在 cmd 下执行以下命令: D:\SoftWare\Git\git-bash.exe --cd-to-home (D:\SoftWare\Git 是 ...

  5. Spring MVC新手教程(二)

    第一篇文章宏观讲了Spring MVC概念,以及分享了一个高速入门的样例. 这篇文章主要来谈谈Spring MVC的配置文件. 首先来谈谈web.xml: web项目启动时自己主动载入到内存中的信息, ...

  6. ROS探索总结(三)——ROS新手教程【转】

    转自:http://blog.csdn.net/hcx25909/article/details/8811313 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 一ROS的 ...

  7. GitHub 新手教程 四,Git GUI 新手教程(1),OpenSSH Public Key

    1,从开始菜单 启动 Git GUI,或者运行: D:\soft\Git\cmd\git-gui.exe(D:\soft\Git 为您的 GitHub 安装文件夹) 2,获取 SSH 密钥: 3,点击 ...

  8. 【SSH系列】深入浅出spring IOC中三种依赖注入方式

    spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控 ...

  9. spring IOC中三种依赖注入方式

    Spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则,用来消减计算机程序之间的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入 ...

随机推荐

  1. Educational Codeforces Round 24 题解

    A: 考你会不会除法 //By SiriusRen #include <bits/stdc++.h> using namespace std; #define int long long ...

  2. 【知识总结】回文自动机(Palindrome_Automaton)

    参考资料:Palindromic Tree--回文树[处理一类回文串问题的强力工具](请注意,其中似乎有一些错误) 回文自动机似乎和回文树是同一个东西qwq? 回文自动机(PAM)是一种处理回文串的工 ...

  3. pip使用豆瓣镜像源

    pip使用豆瓣的镜像源 豆瓣镜像地址: https://pypi.douban.com/simple/ 虽然用easy_install和pip来安装第三方库很方便 他们的原理其实就是从Python的官 ...

  4. Centos7下安装python环境

    前言 centos7默认是装有pyhton的. #检查python版本 [root@oldboy_python ~ ::]#python -V Python 但是众所周知,python2版本到2020 ...

  5. 初步认识kafka

    Kafka是用于日志处理的分布式消息队列,Kafka使用scala语言开发的. 各个开源分布式处理系统Cloudera.Apache Storm.Spark都支持与Kafka集成.其日志处理的一个场景 ...

  6. [ JSOI 2015 ] Salesman

    \(\\\) \(Description\) 给出一棵以\(1\)为根的\(N\)个节点的树,开始的时候你在\(1\)号节点. 除了\(1\)号节点以外,每个点都有访问次数限制\(t_i\),即到达该 ...

  7. mysql之数据去重并记录总数

    引用: http://blog.sina.com.cn/s/blog_6c9d65a10101bkgk.htmlhttp://www.jb51.net/article/39302.htm 1.使用di ...

  8. Android项目实战_手机安全卫士系统加速

    ## 1.本地数据库自动更新的工作机制1. 开启一个服务,定时访问服务器2. 进行版本对比,如果最新版本比较高,获取需要更新的内容3. 将新内容插入到本地数据库中 ## 2.如何处理横竖屏切换1. 指 ...

  9. 六时车主 App iOS隐私政策

    本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐私权政策另 ...

  10. 【YOLO】实时对象检测使用体验

    官网:https://pjreddie.com/darknet/yolo/ 以下全部在服务器上完成,服务器上是有opencv等. 1.安装Darknet git clone https://githu ...