Spring:IOC

Spring

Spring是于2003 年兴起的一个开源,轻量级(不需要依赖其他配置直接使用),一站式的Java开发框架,由Rod Johnson创建。

一站式:spring在javaee三层结构中,每一层都提供不同的解决技术

  • web层:SpringMVC
  • service层:Spring的IOC
  • dao层:Spring的jdbcTemplate

三大特点

容器:Spring框架是一个容器,能够管理项目中的所有对象。

IOC(控制反转):Spring将创建对象的方式反转了,从程序员自己创建反转给了程序。

AOP(面向切面):面向切面编程,简而言之,就是将纵向重复的代码横向抽取出来。Spring框架应用了面向切面的思想,主要体现在为容器中管理的对象生成动态代理对象。

IOC

IOC:Inverse of Control 控制反转,将对象的创建权交给了Spring。

把对象的创建不是通过new方式实现,而是交给spring配置创建类对象。

底层原理使用技术

  1. xml配置文件
  2. dom4j解决xml
  3. 工厂设计模式
  4. 反射

画图分析ioc实现原理

创建User类,当servlet调用User类中add方法时,需要在servlet中new一个User类,此时User类和servlet类耦合度太高,如果User类改类名或add方法名改变时,servlet类也得改。

针对上面情况,我们优化代码,将add方法放在UserService类中,新建一个工厂类专门创建UserService类对象,此时servlet类只需要调用工厂类就可以创建UserService对象,但是这样操作使得servlet类和工厂类耦合度变高,所以,我们使用spring框架创建UserService对象,降低程序耦合度。

我们看看spring框架是如何创建一个UserService对象,

第一步:创建xml文件对UserService进行配置;

第二步:spring框架使用dom4j对xml文件进行解析,根据id值,得到UserService的class属性;

第三步:使用反射通过class属性创建UserService对象,并返回。

这三步都是在spring内部进行,无需我们操作,这就是ioc控制反转。

IOC入门案例

第一步:导入jar包

Jar特点:

.jar——jar包

javadoc.jar——文档包

sources.jar——源码包

做Spring最基本功能时候,导入四个核心的jar包就可以了

 

导入支持日志输出的jar包

第二步:创建类,在类里面创建方法

public class User {
	public void add() {
		System.out.println("输出add方法");
	}
	public static void main(String[] args) {
		// 原始做法
		User user = new User();
		user.add();
	}
}

第三步: 创建Spring配置文件,配置创建类

Spring核心配置文件名称和位置不是固定的,建议放到src下面,官方建议applicationContext.xml

引入schema约束,并配置对象创建

<?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="user" class="com.feicui.pojo.User"></bean>
</beans>

引入log4j.properties配置文件

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c://mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=info, stdout

第四步:写代码测试对象创建

public class T1 {
	@Test
	public void T1() {
		// 加载Spring配置文件
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		// 得到配置创建的对象
		User user = (User) context.getBean("user");
		System.out.println(user);
		user.add();
	}
}

配置文件没有约束问题

spring引入schema约束,把约束文件引入到eclipse中

复制约束路径:http://www.springframework.org/schema/beans/spring-beans.xsd

Window-->最后一行Preferences-->搜XML Catalog-->Add

约束路径复制到Key

Location引入本地文件

Key type改为Schema location

Spring的分配置文件的开发

一种:创建工厂的时候加载多个配置文件

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml"); 

二种:在一个配置文件中包含另一个配置文件

<import resource="applicationContext2.xml"></import>

Spring中的工厂

ApplicationContext

ApplicatioContext接口有两个实现类

  • ClassPathXmlApplicationContext:加载类路径下spring的配置文件
  • FileSystemXmlApplicationContext:加载本地磁盘下spring的配置文件

BeanFactory

BeanFactory和ApplicationContext的区别

BeanFactory:是在getBean的时候才会生成类的实例

ApplicationContext:在加载applicationContext.xml时候就会创建

结论:web开发中使用applicationContext,在资源匮乏的环境可以使用BeanFactory。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值