关于SpringIOC的一些总结

本文深入讲解了Spring框架的核心特性——依赖注入(IOC)及其应用场景。介绍了Spring中的两大核心技术:AOP(面向切面编程)和IOC,并详细阐述了IOC的工作原理、Spring创建对象的方式以及依赖注入的两种方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是Spring?

Spring是一个分层的一站式轻量级开源框架,它的作用就是简化项目的开发,提高项目开发效率。

我们先来说一下Spring中的两大核心技术。IOC和AOP

AOP(Aspect Oriented Programming 面向切面编程),基于动态代理功能增强。

2.IOC

IoC(Inverse of Control 反转控制): 将对象创建权利交给Spring工厂进行管理。

       它解决的问题:使用IOC可以解决程序耦合性高的问题

那么它又是如何创建对象的呢?我们来看一下Spring是如何创建对象的。

xml配置如下:

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

<bean id="userDao" class="cn.java.dao.impl.UserDaoImpl"></bean>

专门用来生产bean的工厂类如下:

public class BeanFactory {

// 从xml文件中解析bean,通过反射得到的对象存放到map中

private static Map<String, Object> map = new HashMap<String, Object>();

/**

 * 解析xml文件

 */

static {

SAXReader saxReader = new SAXReader();

try {

Document document = saxReader.read(BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml"));

Element root = document.getRootElement();

String id = root.attributeValue("id");

// 类的全路径名

String clazz = root.attributeValue("class");

// 通过反射生成对象

Object obj = Class.forName(clazz).newInstance();

map.put(id, obj);

} catch (Exception e) {

e.printStackTrace();

}

}

/**获取bean对象的工厂方法 */

public static Object getBean(String id) {

return map.get(id);

}

}

这样,我们在需要bean的时候只需要通过BeanFactory.getBean(“bean的id”)来获取对象。

Spring中的工厂

1.Applicationcontext

2.BeanFactory

使用上面两个工厂都可以获得对象

1.Applicationcontext

使用该接口可以获取到具体的Bean对象;

该接口下有两个具体的实现类

ClassPathXmlApplicationContext            -- 加载类路径下的Spring配置文件 

FileSystemXmlApplicationContext            -- 加载本地磁盘下的Spring配置文件

下面演示这两种获取bean的用法:

public class TestIOC {

@Test

public void test1(){

//创建Spring工厂(创建IOC容器)

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

UserDao userDao  = (UserDao) ac.getBean("userDao");

userDao.save();

}

@Test

public void test2(){

//创建Spring工厂(创建IOC容器)

ApplicationContext ac = new FileSystemXmlApplicationContext("C:/spring/applicationContext.xml");

UserDao userDao  = (UserDao) ac.getBean("userDao");

userDao.save();

}

}

2.BeanFactory

@Test

public void test3(){

BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

UserDao userDao = (UserDao) factory.getBean("userDao");

userDao.save();

}

那么BeanFactory和ApplicationContext又有哪些区别呢?
            * BeanFactory                -- BeanFactory采取延迟加载,第一次getBean时才会初始化Bean
            * ApplicationContext        -- 在加载applicationContext.xml时候就会创建具体的Bean对象的实例

Spring生成Bean的三种方式

之前使用的都是无参构造方法生成的。

1.无参构造方法

2.静态工厂实例化方式

3.实例工厂实例化方式

依赖注入

Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!!

两种方式:构造方法注入和set方法注入

1.构造方法注入,你需要在实体类中提供有参构造方法

applicationcontext.xml文件配置bean如下:

<!-- 构造方法注入 -->

<bean id="car" class="cn.itcast.domain.Car">

<constructor-arg name="name" value="奥迪A6"></constructor-arg>

<constructor-arg name="price" value="57.3"></constructor-arg>

</bean>

2.set方法注入

创建People实体类,提供属性的set方法,不需要提供有参构造方法

 <!-- 第二种注入形式:set方法注入 -->

    <bean id="people" class="cn.itcast.domain.People">

     <property name="name" value="小明"></property>

     <property name="address" value="上海"></property>

     <property name="car" ref="car"></property>

</bean>

注意:采用set方法注入时,类中一定要有无参构造方法,因为spring会先调用无参构造方法实例化对象。

 

Set方法其他注入写法

1.p命名空间写法

语法:

p:简单属性名=”值”

p:对象属性名-ref=”bean的id”

如:<bean id="people" class="cn.itcast.domain.People" p:name="小刚" p:address="北京" p:car-ref="car"></bean>

 

2.SpEL的写法(Spring3.0提供)

语法:

注入字符串:#{‘字符串’}

注入数字:#{数字}

注入其它对象:#{对象id}

如:

 <bean id="people" class="cn.itcast.domain.People">

     <property name="name" value="#{'小明'}"></property>

     <property name="address" value="#{'上海'}"></property>

     <property name="car" value="#{car}"></property>

    </bean>

以上就是本人对IOC的一些总结,写的不好,还请大家多多原谅,欢迎大家一起讨论交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值