java cglib jar包_Java高级入门:Spring框架

0680ac89c6c9a33aa099b55f54754e74.png

spring的概念:

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
IoC : Inversion of Control
AOP : Aspect Oriented Programming

Spring4具有哪些新特性?

删除了不常用的废弃的包和方法,支持部分JDK8的新特性,和JAVAEE7.

简述SpringIoC程序环境搭建步骤?

1.导入jar包。

cbfeba5808d02127af22c8b5e39adb3a.png

dcb953e20362b57b4a2c560f7f8b91bb.png

2.创建Spring配置文件

e86a57e0e76289df6817bd1035c7fc90.png

3.bean的注册和定义

1fdeab608272f05bb039682792ac9c06.png

4.从是spring容器中获取bean。

定义一个没有返回值的接口.

2c0d09d76904c289fe9812fac57e6974.png
定义一个实现类

ef043158f26b0b0830cd80ad9d386aea.png
写一个测试类

93da35eac004b78dd1506d1ca6b1ecbb.png

IOC与DI

IoC

控制反转(IoC,Inversion of Control),是一个概念,是一种思想。控制反转就
是对对象控制权的转移,从程序代码本身反转到了外部容器。把对象的创建、初始化、
销毁等工作交给spring容器来做。由spring容器控制对象的生命周期。

DI

依赖注入:Dependency Injection。依赖注入DI是指程序运行过程中,若需要调用另
一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创
建后传递给程序。
依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式
组织在一起,而不是以硬编码的方式耦合在一起的。

IoC与DI的关系:

IoC是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式之一
是DI。

Bean的装配:

Bean的装配,即Bean对象的创建。

1.默认装配方式(构造方式)
2.动态工厂Bean
3. 静态工厂Bean
4.Bean的作用域(单态模式singleton原型模式prototype)

基于XML的DI

所谓注入,可理解为对象的属性赋值。

设值注入:

1.简单数据类型和引用数据类型注入
2. 集合属性注入(array、set、list、map、properties)
3.域属性自动注入(byNamebyType;局部和全局配置)
4. 空字符串或null的注入

构造注入:

基于注解的DI

1.环境搭建:导入aop包、添加context约束头信息(组件扫描器)
2.常用注解:@Component、@Scope、@Value、@Resource、
@Autowired

附码:

配置文件的扫描器:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="Index of /schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="Index of /schema/context" xsi:schemaLocation="
        Index of /schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        Index of /schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
		<!-- 扫描器 -->
		<context:component-scan base-package="cn.msk.pojo"></context:component-scan>
</beans>

实现类:

Msk实现类:

package cn.msk.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * 表示当前类交给Spring容器管理
 * @author Administrator
 *
 */
@Component("myname")
public class Fll {
	@Value("爱莫淞凯")
	private String name;

	

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

Fll实现类:

package cn.msk.pojo;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
/**
 * 表示当前类交给spring容器管理
 * @author Administrator
 *与@Component功能相同的三个注解:
 *	@Service:该注解添加在Service实现类上
 *	@Controller:该注解添加在Dao实现类上
 *	@Repository:该注解添加在Repository类上。
 *
 */
@Component
//作用是声明取值的类型。
@Scope("prototype")
public class Msk {
	//Value是注入简单数据类型的
	@Value("富萝莉")
	private String name;
	@Value("20")
	private int age;
	//@Autowired是注入引用数据类型的,:默认情况下是byType方式注入,spring的注解。
/*  @Autowired
	//如果要使用byName方式,需要联合@Qualifier注解,需要在另外一个实体类的@Component标签后边加上("名称")
	@Qualifier("myname")
*/
	//引用数据类型的第二种注解,通过@Resource也可以实现注入,默认情况下是byName方式注入,只有找不到与名称相匹配的bean时,才会以类型方式注入.jdk的注解
	@Resource
	private Fll fll;
	
	@Override
	public String toString() {
		return "Msk [name=" + name + ", age=" + age + ", fll=" + fll + "]";
	}
	
	
}

测试类:

package cn.msk.pojo;

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

public class TestDI {
	@Test
	public void TestDI1() {
		//创建容器
		ApplicationContext text = new ClassPathXmlApplicationContext("zhujie.xml");
		Msk bean = text.getBean("msk", Msk.class);
		System.out.println(bean);
	}
}

jar包和输出:

cca93a37573143c7595055097c1bda2a.png

以上输出纯属意外。


为什么使用代理?

	1.可以隐藏目标类的具体实现;
	2.在不修改目标类代码的情况下能够对其功能进行增强。

代理分类:代理分为静态代理和动态代理

静态代理:

若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,
这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 静
态代理中的代理类和目标类会实现同一接口或是派生自相同的父类。

静态代理的实现(目标类和代理类实现相同接口)

动态代理:

代理类在程序运行时创建的代理方式被成为 动态代理。 也就是说,这种情
况下,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代
码中的“指示”动态生成的。
常用的动态代理有两类:JDK动态代理和CGLIB动态代理
	1.如果目标对象实现了接口,采用JDK的动态代理
	2.如果目标对象没有实现了接口,必须采用CGLIB动态代理
	JDK动态代理(JDK 提供的代理实现)
	CGLIB动态代理(引入cglib的jar包)

Aop介绍:

面向切面编程,就是将交叉业务逻辑封装成切面,利用AOP的功能将切面织入到主业务逻辑中。所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全检查、事务、日志等。
若不使用AOP,则会出现代码纠缠,即交叉业务逻辑与主业务逻辑混合在一起。
这样,会使主业务逻辑变的混杂不清。

Aop基本术语介绍:

切面:

切面泛指交叉业务逻辑。比如事务处理、日志处理就可以理解为切面。常用的切面
有通知与顾问。实际就是对主业务逻辑的一种增强。

织入:

织入是指将切面代码插入到目标对象的过程。

连接点:

连接点指切面可以织入的位置。

切入点:

切入点指切面具体织入的位置。

通知:

(Advice通知是切面的一种实现,可以完成简单织入功能(织入功能就是在这里完成的)。
通知定义了增强代码切入到目标代码的时间点,是目标方法执行之前执行,还是之后执行等。通知类型不同,切入时间不同。

顾问(Advisor):

顾问是切面的另一种实现,能够将通知以更为复杂的方式织入到目标对象中,是将通知包装为更复杂切面的装配器。 不仅指定了切入时间点,还可以指定具体的切入点

AOP编程环境搭建:

导入两个jar包(aop/aopalliance)
Spring对AOP的实现(基于Schema-based方式)

常用通知分类:

前置通知(MethodBeforeAdvice)
后置通知(AfterReturningAdvice)
环绕通知(MethodInterceptor)
异常处理通知(ThrowsAdvice)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值