Java 41---Spring框架(2)

导读

1.Spring作用域
2.基于注解的依赖注入
3.AOP:面向切面编程

Spring作用域

在这里插入图片描述

1.singleton:只生成一个实例(容器生成~容器销毁)
2.prototype:每次调用会生成不同的实例(每次请求)
以下在web应用中使用:
3.request:每次请求生成一个实例
4.session:每次会话生成一个实例
5.global-session: 在portlet web中使用

Bean的生命周期

1.singleton类型实例,是在容器加载时生成,在容器关闭时销毁,生成实例会调用init()方法,销毁时调用destroy()方法,destroy()方法只在对象作用域为singleton时才会调用
2.Prototype类型实例,是在每次请求时生成,是由java虚拟机自己销毁,所以不会调用destroy()方法

基于注解的依赖注入

@Component
@Autowired//自动注入,放到属性上默认根据byType注入,如果匹配有误,则根据byName
		//放到set方法上,根据set方法注入
@Scope
@Value
@Service	//一般运用在业务层,与@Component用法作用一致
@Repository	//一般运用在持久层,可以封装一些SQL异常,与@Component用法作用一致
@Controller	//	一般运用在控制层,与@Component用法作用一致
@Resource	//不是由spring提供,由javaEE提供,与@Autowired用法作用基本相同,不同的地方在于
		放到属性上默认根据byName注入,如果匹配有误,则根据byType

在这里插入图片描述

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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    ">
    
  
  <!-- 扫描@Component注解,并生成实例加入到Spring容器 -->
  <!-- base-package表示扫描指定的包及其子包 -->
  <context:component-scan base-package="com.hala.entity"></context:component-scan>
    
</beans>

Book.java

package com.hala.entity;

import org.springframework.stereotype.Component;

@Component
public class Book {
	
	
	public void read() {
		System.out.println("冰与火之歌");
	}

}

Mouse.java

package com.hala.entity;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

//相当于<bean id="mouse" class="com.hala.entity.Mouse"></bean>
@Component("mouse")//不加的话默认为类的名字,首字母小写
@Scope("singleton")//指定bean的作用域,默认为singleton
public class Mouse {
	
	@Value("Jerry")//注入一个值
	private String name;
	
	@Autowired//将book对象自动注入到Mouse
	private Book book;
	
	public void run() {
		System.out.println(name+"老鼠在跑");
	}
	
	public void readBook() {
		book.read();
		System.out.println("老鼠爱读书");
	}

}

MouseTest.java

package com.hala.test;

import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.hala.entity.Mouse;

public class MouseTest {
	
	ClassPathXmlApplicationContext bf=new ClassPathXmlApplicationContext("spring.xml");

	
//	@Test
	public void run() {
		Mouse mouse=(Mouse)bf.getBean("mouse");
		mouse.run();
	}
	
	@Test
	public void readBook() {
		Mouse mouse=(Mouse)bf.getBean("mouse");
		mouse.readBook();;
	}
}

AOP:面向切面编程

在这里插入图片描述
在原来jar包基础上添加以下四个jar包

在这里插入图片描述

1.切入点pointcut,Spring中的aop切入点,是精确到具体的方法,所以切入点的单位是方法
2.切面:aspect
3.通知:
	before:在切入点到达之前调用
	After-returning:在方法正常结束后调用
	After-throwing:在方法出现异常时调用
	After:类似于finnally,无论程序是否出现异常,都会执行
	Around:环绕通知,可以以低侵入式的方式对指定方法进行拦截,并对参数进行校验
4.Aop的优点:
	(1)可以采用低侵入式的方式,给原来的方法添加功能
	(2)复用性很强,一个地方修改全局生效
	(3)添加的功能和原来的方法之间实现松耦合
5.Aop原理:代理模式

添加命名空间
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注解实现AOP

@Aspect
@Before
@After

在配置文件中配置(注意别忘了加上边的命名空间)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值