spring(IOC实例化与DI依赖注入)

spring(IOC实例化与DI依赖注入)

spring框架概念

Spring是众多开源Java项目中的一员,基于分层的JavaEE应用一站式轻量级开源框架,主要核心是 IOC(控制反转/依赖注入)Aop(面向切面)两大技术,实现项目在开发过程中的轻松解耦,提高项目的开发效率。在项目中引入Spring立即带来下面的好处。降低组件之间的耦合度,实现软件各层直接的解耦。可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手动控制事务,也不需要处理复杂的事务传播。容器提供单例模式支持,开发人员就不再需要自己编写实现代码。容器提供了AOP技 术,利用它很容易实现如权限拦截、运行期监控等功能。

spring框架环境搭建

1.创建maven项目

2.基于maven创建普通java工程并调整整体工程环境

3.坐标依赖添加Spring框架核心坐标添加

<dependency> 
  	<groupId>org.springframework</groupId> 
  	<artifactId>spring-context</artifactId> 
  	<version>4.3.9.RELEASE</version> </dependency>

4.编写bean

public class UserService {
   
	public void print(){
   
		System.out.println("Hello Spring");
	}
}	

5.spring配置文件的编写

在src下新建xml文件,并拷贝官网文档提供的模板内容到xml中,配置bean到xml中,把对应bean纳入到spring容器来管理.

<?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="userService" class="com.mage.service.UserService"></bean>
</beans>

6.编写测试类TestSpring

public class TestSpring {
   
	public static void main(String[] args) {
   
		//Spring框架加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
		UserService userService=applicationContext.getBean("userService", UserService.class);
		userService.print();
	}
}

7.验证spring框架环境是否搭建成功

验证方式通过junit4进行验证

加载xml文件的方式有两种,一般使用第一种

  • 通过当前类路径的方式加载xml文件,启动spring容器框架

  • 根据文件系统方式寻找配置文件,启动spring容器框架(不推荐)

思考:Bean是如何被实例化的?—工厂模式

Spring的核心容器视线了IOC,BeanFactory和ApplicationContext是了解Spring核心的关键。

Spring中最基本、最重要的包是org.springframework.beans和org.springframework.context。框架中代码大量

引用了Java中的反射机制,为Spring的反向控制特性提供了基础。

BeanFactory提供了一种配置机制来管理任何种类的Bean。

ApplicationContext建立在BeanFactory之上,并增加了其他的功能,比如对国际化的支持、获取资源、事件传递

等。

spring Ioc实例化Bean对象的三种方式

构造器方式实例化bean对象

 <bean id="userService" name="userService" class="com.mage.service.UserService"></bean>

通过默认构造器创建空构造方法必须存在否则创建失败

静态工厂模式

特点:

  • 要有该工厂类及工厂方法

  • 工厂方法是静态的

  • StaticFactory静态工厂

/**
 * 静态工厂模式
 * @author lxb
 *
 */
public class StaticFactory {
   
	public static GoodsService createGoodsService(){
   
		return new GoodsService();
	}
}

GoodsService实体类

public class GoodsService {
   
	public void getGoodsInfo(){
   
		System.out.println("GoodsService!");
	}
}

Bean配置

<?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="goodsService"
	   		class="com.mage.factory.StaticFactory" factory-method="createGoodsService">
	   </bean>
</beans>

当我们指定Spring使用静态工厂方法来创建Bean实例时,Spring将先解析配置文件,并根据配置文件指定的信息, **通过反射调用静态工厂类的静态工厂方法,并将该静态工厂方法的返回值作为Bean实例,**在这个过程中,Spring不再负责创建Bean实例,Bean实例是由用户提供的静态工厂方法提供的。

实例化工厂方式

<!-- 实例化工厂 
	1、定义实例化工厂bean 
	2、引用工厂bean指定工厂创建方法(方法为非静态) 
-->
<bean id="InstanceFactory" class="com.mage.factory.InstanceFactory"></bean>
<bean id="goodsService" factory-bean="instanceFactory" factory- method="createGoodsService"></bean>

Spring三种实例化bean的方式比较

方式一:**通过bean的缺省构造函数创建,**当各个bean的业务逻辑相互比较独立的时候或者和外界关联较少的时候可以使用。

方式二:利用静态factory方法创建,可以统一管理各个bean的创建,如各个bean在创建之前需要相同的初始化处

理,则可用这个factory方法先进行统一的处理等等。

方式三:利用实例化factory方法创建,即将factory方法也作为了业务bean来控制,

1、可用于集成其他框架的bean创建管理方法

2、能够使bean和factory的角色互换

开发中项目一般使用一种方式实例化bean,项目开发基本采用第一种方式,交给spring托管,使用时直接拿来使用即可,另外两种了解即可。

spring依赖注入

spring Ioc注入

set注入

xml配置(同时spring也提供了对于基本数据类型的set注入方式)

<?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="userDao" class="com.mage.dao.UserDao">
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值