2、spring入门—Spring IOC容器
2016-11-04 10:06
260 查看
#spring——IOC及bean容器#
一 接口
接口:只能有声明不能有实现,支持多重继承(在java8中接口可以拥有方法体)
抽象类:即可以有包含实现的声明也可以有不包含实现的声明
类:声明必须包含实现
接口实现的变动不会影响其他各层的调用,对公共服务非常重要
二 IOC——控制反转
控制反转:控制权的转移,应用程序本身不负责依赖对象的创建与维护,而是由外部容器负责创建和维护。
依赖注入(DI):是一种实现方式,由IOC容器在运行期间,动态的将某种依赖关系注入到对象之中
目的:创建对象并且组装对象之间的关系
三 Spring的bean配置
在IOC容器中将所有的控制对象称作bean,Spring对于bean的使用有两种方式:基于spring-ioc.xml的配置和注解。
注意xml中关于bean的配置程序段
<bean id="oneInterface(自定义)" class="配置的实现类"></bean>
使用示例:
public void test(){
OneInterface interface=super.getBean("oneInterface");//获取bean,不需要new对象
interface.hello();//调用函数
}
#spring——Spring注入方式#
Spring是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
常用注入方式:设值注入,构造注入
注意:参数的名称必须保持一致!!!!
设值注入(不需要显示地调用set方法,会根据xml的相关配置自动进行调用。)
利用属性或成员变量的set方法进行注入
其中property里面的name是需要注入参数的成员变量的名称,ref是注入参数引入bean的名称
构造注入
使用constructor-arg
根据ref,将ref所指对象的实例赋值给name所指成员变量
<!-- <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> -->
<!-- <property name="injectionDAO" ref="injectionDAO"></property> -->
<!-- </bean> -->
<bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
</bean>
<bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean>
以下转载自http://blog.csdn.net/qql2011/article/details/52870940
从慕课网的java工程师路径一路学上来,感觉很顺利,但鉴于Spring系列对新手不太友好,写点我的理解希望对新手有点帮助!
慕课网地址:http://www.imooc.com/learn/196
由于老师用的环境比较复杂,我们暂时不需要那么复杂的环境,可以先搭建一个简单点的!注重对知识的学习即可:
在eclipse中新建web工程:
![](https://img-blog.csdn.net/20161020140504628?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
填入项目名,点击呢next->next,生成web.xml打勾,完成:
![](https://img-blog.csdn.net/20161020140530223?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
引入jar包,除了老师所给的spring1、2外还需要引入junit-4.10.jar包和commons-logging-1.1.jar
可以从我的百度云下载:http://pan.baidu.com/s/1mijRa2W
![](https://img-blog.csdn.net/20161020140549223?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这样就可以开始学习了。
在Java Resources/src新建新建一个包com.imooc.ioc.interfaces,并在包里新建一个接口OneInterface和一个实现OneInterfaceImpl:
[java]
view plain
copy
print?
package com.imooc.ioc.interfaces;
public interface OneInterface {
public void say(String word);
}
![](http://static.blog.csdn.net/images/save_snippets.png)
[java]
view plain
copy
print?
package com.imooc.ioc.interfaces;
public class OneInterfaceImpl implements OneInterface {
public void say(String word) {
return "Word from interface \"OneInterface\":"+word;
}
}
![](http://static.blog.csdn.net/images/save_snippets.png)
[html]
view plain
copy
print?
<?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">
<bean id="oneinterface" class="com.imooc.ioc.interfaces.OneInterfaceImpl"></bean>
</beans>
![](http://static.blog.csdn.net/images/save_snippets.png)
老师视频中用的父类UnitTestBase是自己自定义的,我们需要用的前面junit中学到的知识自己写个简单点的测试方法:
[java]
view plain
copy
print?
package com.imooc.ioc.interfaces;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
private ClassPathXmlApplicationContext ctx;
@Before
public void init(){
ctx = new ClassPathXmlApplicationContext("spring-ioc.xml");
ctx.start();
}
@Test
public void testHello(){
OneInterface oneinterface = (OneInterface)ctx.getBean("oneinterface");
System.out.println(oneinterface.say("我的输入参数"));
}
@After
public void detroy(){
ctx.destroy();
}
}
![](http://static.blog.csdn.net/images/save_snippets.png)
这样就可以运行Junit测试了,整体预览:
![](https://img-blog.csdn.net/20161020140612865?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运行:
![](https://img-blog.csdn.net/20161020140624178?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
结果:
![](https://img-blog.csdn.net/20161020140637661?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这样大体实现了老师的功能。
一 接口
接口:只能有声明不能有实现,支持多重继承(在java8中接口可以拥有方法体)
抽象类:即可以有包含实现的声明也可以有不包含实现的声明
类:声明必须包含实现
接口实现的变动不会影响其他各层的调用,对公共服务非常重要
二 IOC——控制反转
控制反转:控制权的转移,应用程序本身不负责依赖对象的创建与维护,而是由外部容器负责创建和维护。
依赖注入(DI):是一种实现方式,由IOC容器在运行期间,动态的将某种依赖关系注入到对象之中
目的:创建对象并且组装对象之间的关系
三 Spring的bean配置
在IOC容器中将所有的控制对象称作bean,Spring对于bean的使用有两种方式:基于spring-ioc.xml的配置和注解。
注意xml中关于bean的配置程序段
<bean id="oneInterface(自定义)" class="配置的实现类"></bean>
使用示例:
public void test(){
OneInterface interface=super.getBean("oneInterface");//获取bean,不需要new对象
interface.hello();//调用函数
}
#spring——Spring注入方式#
Spring是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
常用注入方式:设值注入,构造注入
注意:参数的名称必须保持一致!!!!
设值注入(不需要显示地调用set方法,会根据xml的相关配置自动进行调用。)
利用属性或成员变量的set方法进行注入
其中property里面的name是需要注入参数的成员变量的名称,ref是注入参数引入bean的名称
构造注入
使用constructor-arg
根据ref,将ref所指对象的实例赋值给name所指成员变量
<!-- <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> -->
<!-- <property name="injectionDAO" ref="injectionDAO"></property> -->
<!-- </bean> -->
<bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
</bean>
<bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></bean>
以下转载自http://blog.csdn.net/qql2011/article/details/52870940
从慕课网的java工程师路径一路学上来,感觉很顺利,但鉴于Spring系列对新手不太友好,写点我的理解希望对新手有点帮助!
慕课网地址:http://www.imooc.com/learn/196
1、搭建环境
由于老师用的环境比较复杂,我们暂时不需要那么复杂的环境,可以先搭建一个简单点的!注重对知识的学习即可:在eclipse中新建web工程:
填入项目名,点击呢next->next,生成web.xml打勾,完成:
引入jar包,除了老师所给的spring1、2外还需要引入junit-4.10.jar包和commons-logging-1.1.jar
可以从我的百度云下载:http://pan.baidu.com/s/1mijRa2W
这样就可以开始学习了。
2、创建接口及实现
在Java Resources/src新建新建一个包com.imooc.ioc.interfaces,并在包里新建一个接口OneInterface和一个实现OneInterfaceImpl:[java]
view plain
copy
print?
package com.imooc.ioc.interfaces;
public interface OneInterface {
public void say(String word);
}
![](http://static.blog.csdn.net/images/save_snippets.png)
package com.imooc.ioc.interfaces; public interface OneInterface { public void say(String word); }
[java]
view plain
copy
print?
package com.imooc.ioc.interfaces;
public class OneInterfaceImpl implements OneInterface {
public void say(String word) {
return "Word from interface \"OneInterface\":"+word;
}
}
![](http://static.blog.csdn.net/images/save_snippets.png)
package com.imooc.ioc.interfaces; public class OneInterfaceImpl implements OneInterface { public void say(String word) { return "Word from interface \"OneInterface\":"+word; } }在Java Resources/src下新建一个spring配置文件spring-ioc.xml:
[html]
view plain
copy
print?
<?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">
<bean id="oneinterface" class="com.imooc.ioc.interfaces.OneInterfaceImpl"></bean>
</beans>
![](http://static.blog.csdn.net/images/save_snippets.png)
<?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"> <bean id="oneinterface" class="com.imooc.ioc.interfaces.OneInterfaceImpl"></bean> </beans>之后就可以创建一个测试类来验证我们配置的正确性了。在com.imooc.ioc.interfaces中新建一个Main类:
老师视频中用的父类UnitTestBase是自己自定义的,我们需要用的前面junit中学到的知识自己写个简单点的测试方法:
[java]
view plain
copy
print?
package com.imooc.ioc.interfaces;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
private ClassPathXmlApplicationContext ctx;
@Before
public void init(){
ctx = new ClassPathXmlApplicationContext("spring-ioc.xml");
ctx.start();
}
@Test
public void testHello(){
OneInterface oneinterface = (OneInterface)ctx.getBean("oneinterface");
System.out.println(oneinterface.say("我的输入参数"));
}
@After
public void detroy(){
ctx.destroy();
}
}
![](http://static.blog.csdn.net/images/save_snippets.png)
package com.imooc.ioc.interfaces; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { private ClassPathXmlApplicationContext ctx; @Before public void init(){ ctx = new ClassPathXmlApplicationContext("spring-ioc.xml"); ctx.start(); } @Test public void testHello(){ OneInterface oneinterface = (OneInterface)ctx.getBean("oneinterface"); System.out.println(oneinterface.say("我的输入参数")); } @After public void detroy(){ ctx.destroy(); } }
这样就可以运行Junit测试了,整体预览:
运行:
结果:
这样大体实现了老师的功能。
相关文章推荐
- spring 父子容器的概念,入门博客推荐。必看
- spring入门 IOC及Bean容器
- Spring入门——基于Java的容器注解说明之@bean
- Spring 系列: Spring 框架简介----Spring AOP 和 IOC 容器入门
- springboot 普通类获取spring IOC容器中的Bean<七>
- spring复习 -day1:Spring简介 、 Spring容器 、 Spring IOC
- 【Spring从入门到精通】(四)容器的基础XmlBeanFactory
- Spring入门之两个bean容器的介绍
- Spring容器框架、spring ioc、两种注入方法set注入与构造器注入
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- 【Spring】2 Spring IoC容器中定义组件依赖的方式
- Spring入门学习——使用Bean感知容器
- Spring 核心知识点 IOC容器入门与了解
- Spring IOC容器---入门 一
- Spring入门(基于Java的容器注解之@Scope和基于泛型的自动装配)
- Spring 系列: Spring 框架简介- Spring AOP 和 IOC 容器入门
- Spring入门篇之Bean容器的初始化
- Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
- Spring在非web应用中优雅地关闭Spring IoC容器
- Spring 系列: Spring 框架简介- Spring AOP 和 IOC 容器入门