首页 > 代码库 > (一)Spring框架基础
(一)Spring框架基础
一、什么是spring框架
-
spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,ibatis框架等组合使用。
二、架构概述
2.1 IoC(Inversion of Control) :控制反转
- 对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。
-
spring中有三种注入方式,一种是set注入,一种是接口注入,另一种是构造方法注入。
2.1.1 第一个基于spring框架的程序(使用spring框架的ioc的优势)
- 导包,由于本例是最简单的spring的程序,所以jar包比较少。
- 创建spring的配置文件。
spring.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" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> <!-- 以上为头文件,必须在eclipse的xml catalog里有相应xsd文件, 有了头文件之后会有提示--> <bean class="test.Man" name="man"></bean> <!-- 创建test包里的Man类的对象,对象名为man --> </beans>
- Test.java
package test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class Test { public static void main(String[] args) { Test test=new Test(); test.one(); test.two(); test.three(); } /** * 普通模式:哪里需要对象,就在哪个方法里new 一个类的对象然后是用。 * 存在的不足:如果有很多个类都使用一个对象,而这个对象改变了的话,就需要在很多个类里修改这个对象。 */ private void one() { PersonI man=new Man(); man.eat(); man.sleep(); } /** * 设计模式(工厂模式、门面模式): * ,优势:如果PersonI的实现类修改了,只要在工厂PersonFactory中修改相应的类即可,而这里无须修改。 */ private void two() { PersonI woman=PersonFactory.getWomen(); //工厂模式 ,优势:如果PersonI的实现类修改了,只要在工厂PersonFactory中修改相应的类即可,而这里无须修改。 woman.eat(); woman.sleep(); } /** * spring的ioc模式,将对象的实例化交给spring框架(spring容器) */ private void three() { /** * 这里的Man对象是在spring.xml中创建(new)好了 */ // ApplicationContext applicationContext=new FileSystemXmlApplicationContext("src/spring.xml"); //推荐使用new ClassPathXmlApplicationContext ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring.xml"); Man man=(Man)applicationContext.getBean("man"); //getBean("man")里的man是spring.xml文件里的id或者name为man的bean man.sleep(); man.eat(); } }
- PersonFactory.java
package test; /** * 工厂模式, * @author Administrator * */ public class PersonFactory { public static PersonI getMan(){ PersonI man=new Man(); return man; } public static PersonI getWomen(){ PersonI women=new Women(); return women; } }
- PersonI.java
package test; public interface PersonI { void eat(); void sleep(); } class Man implements PersonI{ public void eat() { System.out.println("Man 中的eat方法"); } public void sleep() { System.out.println("Man 中的sleep方法"); } } class Women implements PersonI{ public void eat() { System.out.println("Women 中的eat方法"); } public void sleep() { System.out.println("Women 中的sleep方法"); } }
结果:
2.2 AOP面向切面编程
aop就是纵向的编程,如下图所示,业务1和业务2都需要一个共同的操作,与其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同使用这段代码。
spring中面向切面变成的实现有两种方式,一种是动态代理,一种是CGLIB,动态代理必须要提供接口,而CGLIB实现是有继承。
(一)Spring框架基础
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。