Spring 之 IOC
来源:互联网 发布:mac os office 破解 编辑:程序博客网 时间:2024/06/07 09:05
1. 什么是IOC?
IOC : 控制反转, 控制权的转移, 应用程序本身不负责依赖对象的创建和维护, 而是有外部容器负责创建和维护
DI(依赖注入)是其一种实现方式
目的:创建对象并且组装对象之间的关系
事例:
IOC房屋中介
2. Bean容器初始化
基础:两个包
-- org.springframework.beans
-- org.springframework.context
-- BeanFactory提供配置结构和基本功能,加载并初始化Bean
-- ApplicationContext保存了Bean对象并在Spring中被广泛使用
初始化ApplicationContext的三种方式:
-- 加载本地文件
-- 通过Classpath(相对路径)加载文件
-- Web应用中依赖servlet或Listener
3. Spring注入
概念: Spring注入是指在启动Spring容器加载Bean配置的时候,完成对变量的赋值行为
常用的两种注入方式:
-- 设值注入
-- 构造注入
示例:
所需jar包
package dao;public interface InjectDao {public void save(String data);}
package dao;public class InjectDaoImpl implements InjectDao{@Overridepublic void save(String data) {// TODO 自动生成的方法存根System.out.println("注入方式 --->" + data);}}
package services;public interface InjectService {public void save(String data);}
package base;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 Base {private ClassPathXmlApplicationContext context;private String springXmlpath;public Base() {}public Base(String springXmlpath) {this.springXmlpath = springXmlpath;}@Beforepublic void before() {if (StringUtils.isEmpty(springXmlpath)) {springXmlpath = "classpath*:spring-*.xml";}try {context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\\s]+"));context.start();} catch (BeansException e) {e.printStackTrace();}}@Afterpublic void after() {context.destroy();}@SuppressWarnings("unchecked")protected <T extends Object> T getBean(String beanId) {try {return (T)context.getBean(beanId);} catch (BeansException e) {e.printStackTrace();return null;}}protected <T extends Object> T getBean(Class<T> clazz) {try {return context.getBean(clazz);} catch (BeansException e) {e.printStackTrace();return null;}}}
package services;import dao.InjectDao;public class InjectServiceImpl implements InjectService{private InjectDao dao;/*//设值注入public void setDao(InjectDao dao) {this.dao = dao;}*///构造注入public InjectServiceImpl(InjectDao dao){this.dao = dao;}@Overridepublic void save(String data) {// TODO 自动生成的方法存根//模拟业务操作System.out.println("参数接收 ---> " + data);data = data + " --" + this.hashCode();dao.save(data);}}
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="injectService" class="services.InjectServiceImpl"> <!-- 设值注入 --> <!-- <property name="dao" ref="dao"></property> --> <!-- 依赖注入 --> <constructor-arg name="dao" ref="dao"></constructor-arg> </bean> <bean id="dao" class="dao.InjectDaoImpl"></bean></beans>
package test;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.BlockJUnit4ClassRunner;import services.InjectService;import services.InjectServiceImpl;import base.Base;@RunWith(BlockJUnit4ClassRunner.class)public class InjectTest extends Base{//加载配置文件public InjectTest(){super("classpath:spring-injection.xml");}//设值注入@Testpublic void test(){InjectService is = super.getBean("injectService");//is.save("设值注入");is.save("构造注入");}}注: 我这里使用的是单元测试,相关jar包和代码已显示,需要注意的是:bean容器中的bean多对应的id必须和实例化的变量名一致,否则会报错,配置文件必须放在src目录下
0 0
- Spring之IOC
- Spring之IOC
- 玩玩Spring之IOC
- 玩玩Spring之IOC
- 初识Spring之IOC
- Spring 之IOC
- Spring之AOP IOC
- Spring之IOC
- Spring之IOC
- spring之ioc原理
- Spring之IOC
- spring之IOC
- Spring之IOC
- Spring之IoC容器
- Spring之IOC
- Spring框架之IOC
- Spring之IoC原理
- Spring之IOC
- 红米手机2gps始终慢,提速办法2
- 用数据表(Shape)来设置特别属性
- SVN错误问答
- tar/gz/bz/gz2/bz2...压缩与解压缩
- centos7上win2003 virtio (openstack)镜像制作成功(图文详解)
- Spring 之 IOC
- 安装PHP出现错误:Cannot find MySQL header
- Linux下apache2.2.6+php5.2.5+mysql5.0.46+Zend Optimizer 3.3.0+phpMyAdmin-2.11.1源码(一)
- iOS环信3.0集成 (一)SDK的集成
- Linux下apache2.2.6+php5.2.5+mysql5.0.46+Zend Optimizer 3.3.0+phpMyAdmin-2.11.1源码(二)
- phpmyadmin 403 You don’t have permission to access /phpmyadmin/ on this server
- EditText的InputType属性,可以在代码中设置,也可以预先在xml中定义对应关系
- CentOS 5.6安装lamp(Apache2+PHP5+MySQL)
- WINDOWS下使用PTHREAD库