文章目录
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配置方式
编程式事务中的注解配置方式
事务的传播特性
事务传播特性
事务解释
事务传播