Spring 初识

Spring体系结构
在这里插入图片描述

Spring 的“绿草丛”

Spring是一个轻量级框架,它大大简化了Java 企业级开发,提供了强大、稳定的功能,又没有带来额外的负担,让人们在使用它做每件事情的时候都有得体和优雅的感觉。Spring 有两个主要目标:一是让现有技术更易于使用, 二是促进良好的编程习惯(或者称为最佳实践)。

Spring是一个全面的解决方案,但它坚持一个原则: 不重新发明轮子。已经有较好解决方案的领域,Spring 绝不做重复性的实现。例如,对象持久化和ORM,Spring 只是对现有的JDBC.,MyBatis,Hibernate等技术提供支持,使之更易用,而不是重新做一个实现。

Spring框架由大约20个功能模块组成。这些模块被分成六个部分,分别是Core Container、Dala Access/Integration、Web、 AOP (Aspect Oriented Programming)、 Instrumentation 及Test。

Spring Core是框架的最基础部分,提供了loC 特性。Spring Context为企业级开发提供了便利和集成的工具。Spring AOP是基于Spring Core的符合规范的面向切面编程的实现。Spring JDBC提供了JDEC的抽象层,简化了JDBC编码,同时使代码更健壮。Spring ORM对市面上流行的ORM框架提供了支持。Spring Web为Spring在Web应用程序中的使用提供了支持。

Spring IoC

控制反转(Inversion of Control, loC).,也称为依赖注入 (Dependency Injection DI)是面向对象编程中的一种设计理念.用来降低程序代码之间的耦合度。

依赖在代码中一般指通过局部变量、方法参数、返回值等建立的对于其他对象的调用关系。例如,在A类的方法中实例化了 B类的对象并调用其方法以完成特定的功,我们就说A类依赖于B类。

Spring入门小案例

1、下载相关jar包(点击这里去下载)并添加到项目中
在这里插入图片描述
后四个是Spring的核心jar包,第一个是Spring的运行依赖组件。

2、编写一个很简单的实体类Emp:

package com.xyj.entity;

public class Emp {
	private String ename;

	public void setEname(String ename) {
		this.ename = ename;
	}

	@Override
	public String toString() {
		return "Emp [ename=" + ename + "]";
	}
}

3、编写Spring的配置文件ApplicationContext.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- 通过bean元素声明需要Spring创建的实例,该实例的类型通过class属性指定
		 并通过id属性为该实例指定一个名称,以便于访问 -->
	<bean id="emp" class="com.xyj.entity.Emp">
	
		<!-- property元素用来为实例属性赋值
			 此处实际是调用setEname()方法实现赋值操作 -->
		<property name="ename" value="张三"></property>
		
	</bean>
	
</beans>

在Spring配置文件中,使用Bean元素来定义Bean(也可称为组件)的实例。

(1) 使用bean元素定义一个组件时,通常需要使用id属性为其指定一个用来访问的唯一的名称。如果想为Bean指定更多的别名,可以通过name属性指定,名称之间使用逗号、分号或空格进行分隔。

(2) Spring为Bean的属性赋值是通过调用属性的setter方法实现的,这种做
法称为“ 设值注入”,而非直接为属性赋值。若属性名为ename,但是setter 方法名为setPeoplename( ), Spring 配置文件中应写成name="peoplename"而非name= “ename”。所以在为属性和setter访问器命名时,一定要注意遵循JavaBean的命名规范。


4、通过代码通过Spring获取Emp的实例

package com.xyj.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xyj.entity.Emp;

public class Test {
	public static void main(String[] args) {
		
		//通过 ClassPathXmlApplicationContext 实例化 Spring 的上下文
		ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");
		//通过 ApplicationContext 的 getBean() 方法,根据id来获取Bean的实例
		Emp emp1 = (Emp) ctx.getBean("emp");//emp是Spring配置文件中对用bean元素的id值
		//或者可以直接通过Emp.class来获取Bean的实例
		Emp emp2 = ctx.getBean(Emp.class);
		
		System.out.println(emp1);//Emp [ename=张三]
		System.out.println(emp2);//Emp [ename=张三]
		
		System.out.println(emp1==emp2);//true 当然这两个是同一个对象 
	}
}

ApplicationContext 是一个接口,负责读取Spring配置文件,管理对象的加载、生成、维护 Bean对象与Bean对象之间的依赖关系,负责Bean的生命周期等。ClassPathXmlApplicationContext是ApplicationContext接口的实现类,用于从classpath路径中读取Spring配置文件。

(1)除了ClassPathXmlApplicationContext, ApplicationContext 接口还有其他实现类。例如,FileSystemXmlApplicationContext也可以用于加载Spring配置文件。

(2)除了ApplicationContext 及其实现类,还可以通过BeanFactory接口及其实现类对Bean组件实施管理。事实上,ApplicationContext 就是建立在BeanFactory 的基础之上,BeanFactory是Spring IoC容器的核心,负责管理组件和它们之间的依赖关系,应用程序通过BeanFactory接口与Spring IoC容器交互。ApplicationContext 是BeanFactory的子接口,可以对企业级开发提供更全面的支持。


Spring AOP

面向切面编程(Aspect Oriented Programming, AOP) 是软件编程思想发展到一定阶段的产物。是对面向对象编程(Object Oriented Programming, OOP) 的有益补充。AOP一般适用于具有横切逻辑的场合,如访问控制、事务管理、性能监测等。

在业务系统中,总有一些散落、渗透到系统各处且不得不处理的事情,这些穿插在既定业务中的操作就是所谓的“横切逻辑”,也称为切面。

面向切面编程,简单的说就是在不改变原程序的基础上为代码片段增加新的功能,对代码进行增强处理(前置增强,后置增强、环绕增强、异常抛出异常、最终异常)。

面向切面编程的一些概念:
➢切面(Aspect): 一个模块化的横切逻辑(或称横切关注点),可能会横切多个对象。
➢连接点(Join Point):程序执行中的某个具体的执行点。
➢增强处理 (Advice): 切面在某个特定连接点上执行的代码逻辑。
➢切入点(Pointcut): 对连接点的特征进行描述,可以使用正则表达式。增强处理和一个切入点表达式相关联,并在与这个切入点匹配的某个连接点上运行。
➢目标对象(Target object): 被-一个或多个切面增强的对象。
➢AOP代理(AOP proxy):由AOP框架所创建的对象,实现执行增强处理方法等功能。
➢织入(Weaving): 将增强处理连接到应用程序中的类型或对象上的过程。
➢增强处理类型, 在原对象的xxx()方法之前插入的增强处理为前置增强,该方法正常执行完以后插入的增强处理为后置增强,此外还有环绕增强、异常抛出增强 、最终增强等类型。

说明:切面可以理解为由增强处理和切入点组成,既包含了横切逻辑的定义,也包含了连接点 的定义。面向切面编程主要关心两个问题,即在什么位置,执行什么功能。Spring AOP是负责实施切面的框架,即由Spring AOP完成织入工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值