spring基础知识

bean的装配方式

1.基于xml的装配

需要满足2个基本条件

1.bean类必须提供一个默认的无参构造方法
2.bean类必须为需要注入的属性提供对应的setter方法

2.基于注解的装配

常见注解如下:

1.@Component:
表示一个组件(bean),可以作用在任何层次。使用时标注到对应类上就可以了。

2.@Repository:
用于数据访问层(DAO层),其功能与@Component相似。

3.@Controller作用在控制层。

4.@Autowired:
用于对bean的属性变量、属性的setter方法及构造方法进行标注。配合对应的注解处理器完成bean的自动配置工作。默认按照bean的类型进行装配。

5.@Resource:其作用与@Autowired相似。区别在于:@Resource默认按照bean的实例名称进行装配。它有2个重要属性:1.name和type。后面为按照bean的类型进行装配

6.@Qualifier:与@Autowired注解配合使用。会将默认按照bean类型装配修改为按bean的实例名称装配。bean的实例名称由@Qualifier指定。

虽然使用注解装配了,不需要配置元素了,但是仍然需要在xml文件中指定bean。解决办法:只要在xml配置文件中使用包扫描器就可以解决了。如下:

<!-- 注意:在spring中使用注解一定要开启注解 -->
<!--    指定需要扫描的包,使注解生效-->
        <context:component-scan base-package="com.aop.annotation"></context:component-scan>
<!--    使用context命名空间  开启启动基于注解的支持-->
<context:annotation-config/>
        
    <!--    这样就不需要在xml文件中再次配置相应的bean了。-->

3.自动装配

bean元素的autowire的属性值说明
在这里插入图片描述

bean元素常用属性及其子元素

在这里插入图片描述
在这里插入图片描述

使用有参构造创建bean

第一种,通过索引index
在这里插入图片描述
第二种通过type
不建议使用,如果有多个参数式同种类型,就会出现问题
在这里插入图片描述
通过参数名
在这里插入图片描述

spring配置说明

对bean进行别名设置

在这里插入图片描述
在这里插入图片描述

import配置

在这里插入图片描述

依赖注入

在这里插入图片描述

构造器注入

set方式注入

基本数据类型及复杂类型注入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

c命名和p命名空间注入

在这里插入图片描述
在这里插入图片描述

Bean的作用域

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自动装配

在这里插入图片描述
byName
在这里插入图片描述
byType
在这里插入图片描述

使用注解自动装配

可以忽略set方法,因为底层是用反射来做的
在这里插入图片描述
在这里插入图片描述
@Autowired 和 @Qualifier的区别
在这里插入图片描述

@Resource注解

它会先通过匹配bean的名字,如果找不到则会匹配类型进行查找,相当于兼容了@Autowired 和 @Qualifier

在这里插入图片描述

使用注解开发

在这里插入图片描述
使用@Value注解注入值
在这里插入图片描述
在这里插入图片描述
使用注解配置作用域
在这里插入图片描述
在这里插入图片描述

基于javaConfig配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代理模式

静态代理模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

动态代理模式

在这里插入图片描述
在这里插入图片描述

基于接口

直接上代码

Host类

package com.proxy;

public class Host implements Rent{
	@Override
	public void rentOut() {
		System.out.println("我是房东,我要出租房子!");
	}

}

Rent类

package com.proxy;

public interface Rent {
	public void  rentOut();//出租房子
}

ProxyInvocationHandler类

package com.proxy;

import javax.management.ObjectName;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 生成动态代理类
 */
public class ProxyInvocationHandler implements InvocationHandler {
//	被代理的接口
	Object target;
//	动态实例化rent接口
	public void setTarget(Object target){
		this.target=target;
	}

	/**
	 * 处理代理的事件
	 * @param proxy
	 * @param method
	 * @param args
	 * @return
	 * @throws Throwable
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		//动态代理的本质就是使用反射
		seeHouse();
		//通过反射动态调用target中的指定参数的方法 (参数:args)
		Object result=method.invoke(target,args);
//		System.out.println("处理完毕!");
		return result;
	}
//	得到代理类
	public Object getProxy(){
		return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this   );
	}
	public void seeHouse(){
		System.out.println("中介代看房子");
	}
}

Main类

package com.proxy;

public class Main {
	public static void main(String[] args) {
		Host host=new Host();
		ProxyInvocationHandler proxy=new ProxyInvocationHandler();
		proxy.setTarget(host);
//		获取代理
		Rent rent=(Rent) proxy.getProxy();
		rent.rentOut();
	}
}

事务

参考网址:spring事务

事务的概念

在这里插入图片描述

事务的特性

在这里插入图片描述

事务的隔离级别

在这里插入图片描述
在这里插入图片描述

编程式事务

编程式事务中的xml配置方式

在这里插入图片描述
在这里插入图片描述

编程式事务中的注解配置方式

在这里插入图片描述

在这里插入图片描述

事务的传播特性

在这里插入图片描述
事务传播特性
在这里插入图片描述
事务解释

在这里插入图片描述
在这里插入图片描述
事务传播

Bean的生命周期

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值