Sping框架的两大核心技术知识

Spring框架的两大核心技术分别为:

         一.IOC(Inversion of Control, 控制反转)把创建对象的操作交给框架,亦被称为 DI(Dependency Injection, 依赖注入)

         二.AOP(面向切面编程)

IOC

        控制反转

           最基础的调用的对象是通过new一个对象出来,例如:People p=new People

           我们Spring框架中的IOC即改变这种方式的调用,将后面“new People”转换为xml文件去调用,即使用第三者调用

           举个生活中的小例子说明这样的好处:

           People p=new People   相当于两个人之前的直接调用,假如张三和李四,张三需要用到只有李四电脑里面的一份文件,张三就必须直接向李四要,假如李四的电脑坏了,那么张三也就拿不到这份文件,然而IOC就相当于张三叫王五去拿这份文件,李四将文件拷贝给了王五,在这过程中即使李四的电脑坏了,那么张三也能从王五那拿到文件,张三不会受到影响。这就是控制反转的最大好处。即用来降低程序代码之间的耦合度

          依赖注入

              实现依赖注入的三种方式:setter方式注入,构造注入,使用P命名实现注入

              setter方式注入

              创建学生类,给予学生类一个学号,一个姓名的属性(此两个属性必须生成set方法,才能完成setter方式的注入)

public class Student {

	//学号
	private int num;
	//姓名
	private String name;

	public void setNum(int num) {
		this.num = num;
	}

	public void setName(String name) {
		this.name = name;
	}
}

  在applicationContext.xml文件中赋值



		
		
		

              构造注入

               给学生类写个带参的构造函数(写完带参的构造函数后,必须再定义一个无参的构造函数)

//构造器注入
public class Student {
	
	public Student(){
		
		
	}
	public Student(int num,String name){
		
	}
    //学号
	private int num;
	//姓名
	private String name;
}

  在applicationContext.xml文件中赋值

	
	
		
			101
		
		 
            张三
		
	 

                使用P命名空间注入

                在Student最基础类的基础上,给ApplicationContext.xml文件中导入一个头的包


                之后在xml用bean标签赋值




		

AOP

              面向切面编程,简单地说就是在不改变原程序的基础上为代码段增加新功能,对代码段进行增强处理

              前置增强、后置增强、最终增强、异常增强、环绕增强(定义一个用于增强的FirstAop类)

public class FirstAop {
	/*
	 * 
	 * 1.前置 2.后置 3.环绕  4.异常 5.最终
	 */
	//前置增强
	public void pre_study(JoinPoint jp){
		System.out.println("我是前置增强!");
	}
	//后置增强
	public void do_work(JoinPoint jp,Object result){
		//这个result是目标方法的返回值,
		System.out.println("我是后置增强!");
	}
	//最终增强
	public void do_final(JoinPoint jp){
		System.out.println("我是最终增强");
	}
	//异常增强
	public void do_exception(JoinPoint jp,Exception e){
		System.out.println("我是异常增强");	
	}
	//环绕增强
	public Object around(ProceedingJoinPoint pjp){
		System.out.println("我是环绕增强的前值增强");
		try {
			Object result=pjp.proceed();//执行目标方法并且获取目标方法的返回值
			result="改造之后的返回值";
			System.out.println("我是环绕增强的后置");
			return result;  //这个result会完美的替换目标方法的返回值
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return  null;
	}
}

               Student类中定义一个study方法用作于切口

   public lass Student{
    //学号
	private int num;
	//姓名
	private String name;
	
	//学习的方法,当做于切口
	public void study(){
		
		System.out.println("学生"+name+"学号"+num+"在学习");
	}
}

              ApplicationContext.xml文件中配置的代码如下


	
		
		
		
		
			
			
			
			
			
			
			
			
			
			
		
	

              测试类中的关键代码(包括IOC以及AOP的测试)

public class Test {
		public static void main(String[] args) {
			//第一步:读取Spring的核心文件
			ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
			//第二步:根据ac对象获得里面所有的bean
			Student st=(Student) ac.getBean("stu");
			//调用study的方法
			st.study();
			 
		}
}

来自小小程序员的归纳与具体的实现步骤。学艺不精,还请其他各位大佬多多指教!!!

 

你可能感兴趣的:(Spring框架)