Spring ——依赖注入配置一些知识点
依赖注入
依赖注入的原理与实现 依赖注入(DI)和依赖查找(Dependency Lookup)共同组成 控制反转(IoC)。从原理的角度来说,依赖注入和控制反转是没 有不同的,可以看作是从两个角度来阐述一个概念,即基于 Spring 的架构系统中,在一个对象(调用者)为另一个对象(被调用者) 协助工作(调用)时,不用创建,该调用由 Spring 的 Bean 完成, 也就是控制反转。
依赖注入是使用 Reflection 实现的,在 Java 1.3 以后,有一个 重要特性是 Reflection 可以当执行系统的时候,进行动态的创建、 运行和修改实例,依赖注入不仅可以在容器中注入一般属性值,也能将其他引 用注入。
依赖注入起到的作用就是讲对象之间的依赖关系从原先的代码中解耦出来,通过配置文件或注解等方式加上Spring框架的处理让我们对依赖关系灵活集中的进行管理。
借网上一张图一用就明白为什么松耦合了

在我看来就是把东西都放在了配置文件,一些关系都在配置文件给你配好了,只管调用,这是肤浅的理解,底层的是反射的机制
先看一下XML是怎么配置的吧!
构造方法注入
简单一些的注入
<bean id="user" class="com.spring.bean.User">
<!--使用构造方法注入 -->
<constructor-arg>
<value>1</value>
</constructor-arg>
<constructor-arg>
<value>admin</value>
</constructor-arg>
<constructor-arg>
<value>123456</value>
</constructor-arg>
</bean>
构造参数值设置有很多方式:
<!-- 按类型设置-->
<constructor-arg type="java.lang.String" value="Jack"/>
<!-- 按顺序设置-->
<constructor-arg index="1" value="Jack"/>
<!-- 按属性名设置-->
<constructor-arg name="username" value="Jack"/>
可以引申出来一些其他的
<bean name="UserDao" class="com.zejian.spring.impl.UserDaoImpl"/>
<!-- 通过构造注入依赖 -->
<bean name="UserService" class="com.zejian.spring.service.impl.UserServiceImpl">
<!-- 构造方法方式注入UserDao对象,-->
<constructor-arg ref="UserDao"/>
</bean>
在你的业务实现类中
/**
*
* @author 坚持到你GL
*
*/
public class UserServiceImpl implements UserService{
//需要注入的对象Dao
private UserDao userDao;
//通过构造注入得到
public UserServiceImpl(UserDao userDao){
//将传过来的值设置到自己的属性中去
this.userDao=userDao;
} }
bean中各种属性注入方式
正常属性
<!--属性注入 -->
<bean id="info" class="com.spring.bean.Info">
<property name="id" value="1"/>
<property name="adress" value="浙江" />
</bean>
数组类型
<!--配置数组类型 -->
<property name="arr" >
<array>
<value>张三</value>
<value>李四</value>
<value>王五</value>
</array>
</property>
list类型
<!--配置list类型 -->
<property name="week">
<list>
<value>周一</value>
<value>周二</value>
<value>周三</value>
</list>
</property>
map类型
<!--配置map类型 -->
<property name="infos">
<map>
<entry key="name" value="admin"></entry>
<entry key="age" value="23"></entry>
</map>
</property>
set类型
<!--配置set类型 -->
<property name="word">
<set>
<value>hello</value>
<value>world</value>
<value>hi</value>
</set>
</property>
还要一个小知识点
properties文件的读取
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location" value="jdbc.properties"/>
</bean>
实例化的三种方式
其实也没啥就是三种不同方式创建实例
先看一下三个Java文件
package com.spring.factory;
import com.spring.action.HelloWorldImpl;
/**
*
* @author 坚持到你GL
*
*/
public class HelloFactory {
public static HelloWorldImpl createHello() {
return new HelloWorldImpl();
}
}
package com.spring.factory;
import com.spring.action.HelloWorldImpl;
/**
*
* @author 坚持到你GL
*
*/
public class WorldFactory {
public HelloWorldImpl createWorld() {
return new HelloWorldImpl();
}
}
package com.spring.action;
/**
*
* @author 坚持到你GL
*
*/
public class HelloWorldImpl implements HelloWorld{
@Override
public String sayHi() {
// TODO Auto-generated method stub
return "实例化-----Hello World!!!";
}
}
再看一下配置文件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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 构造器实例化 -->
<bean id="helloworld" class="com.spring.action.HelloWorldImpl" ></bean>
<!-- 静态工厂实例化 -->
<bean id="staticworld" class="com.spring.factory.HelloFactory" factory-method="createHello"></bean>
<!-- 实例化工厂实例 -->
<bean id="world" class="com.spring.factory.WorldFactory" ></bean>
<bean id="worlds" factory-bean="world" factory-method="createWorld"></bean>
</beans>
测试代码:
package com.spring.action;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
*
* @author 坚持到你GL
*
*/
public class Mytest {
public static void main(String[] args ) {
ApplicationContext ac=new ClassPathXmlApplicationContext("springXML/app.xml");
//构造器实例化
HelloWorld world=(HelloWorld)ac.getBean("helloworld");
System.out.println(world.sayHi());
//静态工厂实例化
HelloWorld hWorld=(HelloWorld)ac.getBean("staticworld");
System.out.println(hWorld.sayHi()+"----");
//实例工厂
HelloWorld hello=(HelloWorld)ac.getBean("worlds");
System.out.println(hello.sayHi()+"***");
}
}
可能一起给出来不咋好,但是认真看就会看出一点门道
【版本声明】本文为博主原创文章,转载请注明出处
Spring ——依赖注入配置一些知识点的更多相关文章
- Spring 依赖注入方式详解
平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ...
- Spring依赖注入三种方式详解
在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...
- Spring依赖注入:注解注入总结
更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.S ...
- Spring 依赖注入,在Main方法中取得Spring控制的实例
Spring依赖注入机制,在Main方法中通过读取配置文件,获取Spring注入的bean实例.这种应用在实训的时候,老师曾经说过这种方法,而且学Spring入门的时候都会先学会使用如何在普通的jav ...
- Spring依赖注入 --- 简单使用说明
Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...
- spring依赖注入方法
依赖注入就是在程序运行时期,由外部容器动态的将依赖对象注入到组件中,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给sprin ...
- Java Web系列:Spring依赖注入基础
一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...
- Spring依赖注入的三种方式
看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...
- Spring、Spring依赖注入与编码剖析Spring依赖注入的原理
Spring依赖注入 新建PersonIDao 和PersonDao底实现Save方法: public interface PersonIDao { public void save(); } pub ...
随机推荐
- Mac环境下mysql初始化密码问题--If you lose this password, please consult the section How to Reset the Root Password in the MySQL reference manual.
个人在Mac上操作数据库,遇到的启动数据库问题的简单记录 1.苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) 2.进 ...
- 结构体(struct)大小
结构体(struct)大小 本文参考链接:C语言结构体(struct)常见使用方法,链接中的实例代码经实践有几处不准确,本文在引用时已做更改 注意:在结构体定义时不能申请空间(除非是结构体变量),不可 ...
- 四则运算 WEB
coding.net:https://git.oschina.net/ysh0904/WEB.git 一.需求分析 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算 ...
- 个人作业(3)----个人总结(Alpha阶段)
一.个人总结. 个人完成的任务:在此阶段我完成了用户调研.部分测试以及部分博客书写. 个人及团队心得:经过几周Alpha阶段开发后,我大致了解了开发软件的过程,开发一个软件并没有以往想象中那么简易,在 ...
- 201421123059 http://www.cnblogs.com/deng201421123059/
201421123059 http://www.cnblogs.com/deng201421123059/
- 201521123010 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- 201521123052 《Java程序设计》 第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- 201521123019 《Java程序设计》第10周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 只有执 ...
- 201521123024 《Java程序设计》 第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...
- MUI如何调取相册的方法
第一种是HTML方法 <label> <input style="opacity: 0;" type="file" accept=" ...