首页 > 编程语言 > 详细

spring三大核心思想学习(一)

时间:2016-02-17 02:03:28      阅读:818      评论:0      收藏:0      [点我收藏+]

? ? ? ? 我记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了。用spring的人越来越多,用struts的人比原来少多了,用hibernate的就更少了。毕竟现在it人才流动性太大了,招人上来上手很重要,谁知道他什么时候就跑了。。(hibernate太复杂了)。

?

? ? ? ? ?我最近只看spring,所以只说spring。

?

? ? ? ? ?记得当初面试的时候被问到过spring的三大核心思想。相信多数javaer都被问到过这个问题。绝大多数人应该都知道这三个核心思想是什么:控制反转,依赖注入和面向切面编程。

?

? ? ? ? ?印象很深,因为当时对spring不熟,所以被面试官狠狠得鄙视了。。。这几天把这三个功能点复习一下。

? ? ? ? ?

? ? ? ? ?以下内容全是个人理解(免责声明o(∩_∩)):

?

? ? ? ? ?首先,spring最核心,最基础的概念是什么?将spring类比java,java最核心,最基础的概念就是object了。java中,所有的操作都是针对object的(基础类型除外),java中,一切皆对象,一切都是object。类比下来,spring中最基础的概念是bean。在spring中,所以的类都可以认为是一个bean。(个人认为)在spring中的所有文件,都可以认为是注册了的bean和未注册的bean。 ?spring中所有操作都是针对bean的操作。自然,spring的三大核心思想中操作的对象,也是bean。

?

? ? ? ? ?spring三大核心思想之一:IOC,控制反转。

? ? ? ? ?想理解什么叫控制反转,首先要理解什么叫控制没有反转。

? ? ? ? ?看下面代码:

? ? ? ? ?首先有一个接口类:

package testSpring.business.iface;

/**
 * INetPlay : 打印接口,对象需要实现这个接口来实现打印该对象的功能
 * 
 * @author xuejupo jpxue@travelsky.com
 * 
 *         create in 2016-2-16 上午9:16:52
 */

public interface IPrint {
	/**  
	* onLine:  对象需要实现这个方法来实现打印对象的功能
	* void  返回类型   
	*/
	String printObject();
}

? ? ?然后有两个实现类:

package testSpring.business.bean;

import org.springframework.stereotype.Repository;

import testSpring.business.iface.IPrint;

/**  
 *  UserBean : 
 * @author xuejupo  jpxue@travelsky.com 
 * create in 2016-2-16 上午9:22:39    
 */
public class UserBean implements IPrint{
	@Override
	public String printObject() {
		// TODO Auto-generated method stub
		System.out.println("打印对象UserBean:");
		return "abc";
	}

}

?

package testSpring.business.bean;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Service;

import testSpring.business.iface.IPrint;

/**  
 *  MyBean : 
 * @author xuejupo  jpxue@travelsky.com 
 * create in 2016-2-16 上午10:11:43    
 */
public class MyBean implements IPrint{

	@Override
	public String printObject() {
		// TODO Auto-generated method stub
		System.out.println("打印对象MyBean:");
		return null;
	}
}

?现在,我想打印第一个实现类,客户端代码如下:

IPrint print = new UserBean();
print.printObject();

? ? ? ?很简单的代码,这时候对第二个实现类UserBean对象的创建,是由客户端完成的。相当于客户端控制着UserBean对象的创建。代码自然没什么问题,执行结果如下:

打印对象UserBean:

? ? ?很正常的执行结果。但是这时候我想修改一下,打印第二个实现类,这时候就需要修改代码了。对于正式的系统来说,修改代码毕竟是不符合开闭原则,又比较麻烦的事。所以就想能不能用配置文件来代替代码的修改。这时候就需要用到spring的控制反转:对继承了接口IPrint的具体实现类的具体对象的创建,不依赖于调用他的客户端代码,而将控制权交给spring(其实就是xml文件),这就是控制反转。

? ? 下面是xml文件(注册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" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
	http://www.springframework.org/schema/aop  
	http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.2.xsd">
	<!-- 注册bean --!>
	<bean id="userBean" class="testSpring.business.bean.UserBean" />

</beans>

? ? ? ?其中,文件头那一大坨类似网址的东西,我没测试过是啥,网上说是spring的标签规范检验文件的路径。首先他会查找你本地的标签规范文件(一般都有),如果本地没找到就会到他的url里面去找。

? ? ? ? 测试代码如下:

?

//读取配置文件(将配置文件中的bean加载进内存)
		ApplicationContext ctx = new ClassPathXmlApplicationContext("/testSpring/resources/applicationContext.xml");
		//获取的实例  
		IPrint bean=(IPrint)ctx.getBean("userBean");  
		//调用方法  
		bean.printObject();

?结果:

打印对象UserBean:

?如果想要打印另一个实现类,只要修改配置文件:

<bean id="userBean" class="testSpring.business.bean.MyBean" />

?结果:

打印对象MyBean:

? ? ? 很简单,将控制权交到spring的xml文件中。

? ? ? ?

spring三大核心思想学习(一)

原文:http://709002341.iteye.com/blog/2276789

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!