2020年12月15日-笔记
注解
@Resource(name='')
根据id和类型进行查找,指定name后根据id查找。
@Autowired
根据id和类型进行查找
@Qualifier(value='')
指定value后查找
@Component
//组件,等价于
<bean id="user" class="com.kuang.pojo.User"/>
//有几个衍生注解
//dao @Repository
//service @Service
//controller @Controller
//扫描指定包,使注解自动生效
<context:component-scan base-package="com.kuang"/>
//使用注解
<context:annotation-config/>
//四个注解功能都一样,都是代表将某个类注入到Spring中,装配Bean
Configuration
package com.gao.config;
import com.gao.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//这个也会托管到spring容器中,因为他本来就是一个@Component
//配置类
@Configuration
public class GaoConfig {
//注册一个bean
@Bean
public User getUser() {
return new User();
}
}
//类
package com.gao.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class User {
public String name;
public String getName() {
return name;
}
@Value("gaoshuai")
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
import com.gao.config.GaoConfig;
import com.gao.pojo.User;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MyTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(GaoConfig.class);
User getUser = (User) context.getBean("getUser");
System.out.println(getUser.getName());
}
}
AOP
横向业务开发,横切进一个新的业务逻辑。不改变原有代码的情况下,添加新的业务逻辑。
代理模式
SpringAOP的底层
代理模式的分类
- 静态代理
- 动态代理
角色分析
- 抽象角色:一般会使用接口或者抽象类来解决(业务层,需要干那些事)
- 真实角色:被代理的角色(实现业务层,真正去干一些事)
- 代理角色:代理真实角色,代理真实角色后,会做一些操作
- 客户:访问代理对象的人
动态代理
动态代理的代理类是动态生成的,不是直接写好的,分为两大类:基于接口,基于类。
基于接口:jdk的动态代理
基于类:cglib
java字节码实现:javassist
使用jdk,需要知道两个类:Proxy:代理,InvocationHandler:调用处理程序。
- 横切关注点:与业务逻辑无关,但是我们需要关注的部分,日志,安全,缓存,事物等。
- 切面:横切关注点被模块化的类,如 Log 类。
- 通知:切面要完成的工作,类中的方法。
浙公网安备 33010602011771号