Spring 注入
来源:互联网 发布:java jlabel 鼠标事件 编辑:程序博客网 时间:2024/04/30 02:01
新建dao层接口以及service接口,分别模拟数据层,以及逻辑层代码,其中分别写入一个run()方法:
InjectionInterface.java
package dao.interfaces;public interface InjectionInterface { public void run();}
ServiceInterface.java
package service.interfaces;public interface ServiceInterface { public void run();}
新建一个dao层实现类,实现dao层接口方法:
InjectionImpl.java
package dao.interfacesimpl;import dao.interfaces.InjectionInterface;public class InjectionImpl implements InjectionInterface { @Override public void run() { System.out.println("Spring Start!"); }}
建立一个service层实现类,在其中定义一个私有对象,并可以分别以setter方法,和构造器进行传入,这就是两种注入方法:
ServiceImpl.java
package service.intefacesimpl;import service.interfaces.ServiceInterface;import dao.interfaces.InjectionInterface;public class ServiceImpl implements ServiceInterface { private InjectionInterface inject; public ServiceImpl(InjectionInterface inject) { super(); this.inject = inject; } public void setInject(InjectionInterface inject) { this.inject = inject; } @Override public void run() { System.out.println("Service 业务逻辑!"); inject.run(); }}
新建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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" ><!-- <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> --><!-- <property name="injectionDAO" ref="injectionDAO"></property> --><!-- </bean> --> <bean id="serviceInterface" class="service.intefacesimpl.ServiceImpl"> <!-- ><property name="inject" ref="InjectionInterface"></property> --> <constructor-arg name="inject" ref="InjectionInterface"></constructor-arg> <!-- 此处name一定要和 service.intefacesimpl.ServiceImpl 中的InjectionImpl 参数名一致--> </bean> <bean id="InjectionInterface" class="dao.interfacesimpl.InjectionImpl"></bean></beans>
Bean配置项主要有如下几个:
id:代表唯一标识符
class:具体要实例化的哪一个类
scope:指具体范围,即作用域
Constructor arguments:构造器参数
Properties:设置注入.以上两个方法注入是,name一定要和Service层
的实现类里面参数一致,如上放代码里面的inject.
Autowriting mode:自动装配模式
lazy-initialization mode:懒加载模式
Initialization/destruction method:初始化和销毁的方法。
加载方式:
package test;import org.junit.After;import org.junit.Before;import org.springframework.beans.BeansException;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.util.StringUtils;public class UnitTestBase { private ClassPathXmlApplicationContext context; private String springXmlPath; public UnitTestBase(){} public UnitTestBase(String springXml){ this.springXmlPath = springXml; } @Before public void before(){ if(StringUtils.isEmpty(springXmlPath)){ springXmlPath = "classpath*:spring-*.xml"; } try{ context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+")); context.start(); }catch(BeansException e){ e.printStackTrace(); } } @After public void after(){ context.destroy(); } @SuppressWarnings(value = { "unchecked" }) protected <T extends Object>T getBean(String beanId){ return (T)context.getBean(beanId); } protected <T extends Object>T getBean(Class<T> clazz){ return (T)context.getBean(clazz); }}
通过ClassPathXmlApplicationContext ,实例化一个对象context,然后网其中传入xml文件的路径,调用start()方法,即可启动加载。
然后可以通过context.getBean()方法,可以通过传入的参数生成bean的实例,传入的参数可以是id,也可以是类的类型。
Tips:xml路径填写方式有多种,利用classpath的时候,一般未设置情况下从根目录开始,因此若是将配置文件放在包下,则会报错,书写格式如下:
classpath:com/lds/config/spring-injection.xml
包名之间不是用点,而是用 /
下面是测试代码:
package test;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.BlockJUnit4ClassRunner;import service.interfaces.ServiceInterface;@RunWith(BlockJUnit4ClassRunner.class)public class TestInjection extends UnitTestBase{ public TestInjection(){ super("classpath:com/lds/config/spring-injection.xml"); } @Test public void testSetter(){ ServiceInterface interface1 = super.getBean("serviceInterface"); interface1.run(); } @Test public void testConstruct(){ ServiceInterface interface1 = super.getBean("serviceInterface"); interface1.run(); }}
- spring注入:构造注入
- spring 注入 动态注入
- SPRING注入
- Spring 注入
- spring注入
- spring注入
- spring注入
- spring注入
- spring 注入
- Spring 注入
- Spring 注入
- Spring注入
- Spring注入
- spring注入
- spring注入
- Spring注入
- Spring注入
- Spring------Spring注入
- Java对PHP服务器hmac_sha1签名认证方法的匹配实现
- 堆排序
- 探秘Java中String、StringBuilder以及StringBuffer
- Android根据mapping.txt还原混淆代码
- sqlapiu.lib遇到的R4034错误
- Spring 注入
- AutoLayout -> Xcode6
- java 反射机制
- Visual Studio 2015 和 Apache Cordova
- poj解题报告——2260
- 【2.19】文件压缩
- 【2.20】云,云计算,云服务
- 【2.21】微博与微信,摩尔定律及CP…
- 【2.26】数据库