引言
今天介绍Spring框架的几个重要主题,包括注解实现自动装配、Spring注解开发、JavaConfig实现配置以及静态代理模式。这些内容是Spring框架的核心概念,对理解Spring的工作原理和实际应用具有重要意义
一、Spring注解开发
1. 常用注解类型
Spring提供了多种注解来简化配置和开发:
- @Component:通用组件注解,等价于<bean>标签
- @Service:服务层组件注解
- @Repository:数据访问层组件注解
- @Controller:控制层组件注解
- @Value:属性值注入注解
// 示例:使用@Component注解
@Component
public class User {
@Value("张三")
private String name;
// ...
}
2. 自动扫描配置
通过在XML配置文件中添加组件扫描配置,Spring会自动扫描指定包下的注解:
<context:component-scan base-package="com.liu"/>
<context:annotation-config/>
这样就不需要手动在XML中定义每个bean,Spring会自动发现并注册带有@Component及其衍生注解的类。
二、JavaConfig实现配置
1. 配置类定义
使用@Configuration注解标记配置类:
@Configuration
@ComponentScan("com.liu.pojo")
public class LiuConfig {
}
2. 应用上下文初始化
使用AnnotationConfigApplicationContext加载JavaConfig配置:
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
User user = context.getBean("user", User.class);
这种方式更加类型安全,提供了更好的IDE支持和编译时检查。
初始化过程发生了什么?
- 加载配置:读取XML文件或Java配置类
- 解析配置:分析配置中的bean定义
- 创建Bean:根据定义实例化对象
- 依赖注入:将依赖的bean注入到相应的属性中
- 初始化:调用初始化方法(如果有的话)
- 就绪:容器准备就绪,可以提供服务
三、静态代理模式
1. 基本概念
静态代理是一种设计模式,代理类和被代理类在编译时就已经确定
用一个更形象的比喻来解释静态代理:
生活中的代理场景
想象一下你要租房的情况:你(客户) --> 房产中介(代理) --> 房东(真实对象)
你想要租房子,但你不直接联系房东,而是通过房产中介。中介就是你的"代理"。
静态代理的特点
1. 角色明确
- 抽象角色(Rent接口):定义了能做什么(比如租房)
- 真实角色(Host房东):真正做事的人
- 代理角色(Proxy中介):代替真实角色做事的人
- 客户角色(Client):使用服务的人
2. 代理的作用
- 房产中介不只是简单地转达你的要求,还会:
- 带你去看房(额外服务)
- 收取中介费(增强功能)
- 检查你的资质(访问控制)
- 签订合同(流程控制)
2. 实现结构
// 接口定义
public interface UserService {
void add();
void update();
void delete();
void query();
}
// 真实主题类
public class UserServiceImpl implements UserService {
@Override
public void add() {
System.out.println("add成功");
}
// 其他方法实现...
}
// 代理类
public class Proxy implements UserService {
private UserServiceImpl userimpl;
public void setUserService(UserServiceImpl userimpl) {
this.userimpl = userimpl;
}
@Override
public void add() {
log("add");
userimpl.add();
}
// 其他方法实现...
public void log(String msg) {
System.out.println("log:使用了"+ msg +"方法");
}
}
示例:
public class Mt {
public static void main(String[] args) {
UserServiceImpl service = new UserServiceImpl();
Proxy proxy = new Proxy();
proxy.setUserService(service);
proxy.add();
proxy.update();
// ...
}
}
3. 优势与作用
- 增强功能:可以在不修改原代码的情况下添加额外功能(如日志记录)
- 控制访问:代理可以在调用真实对象方法前后添加控制逻辑
- 松耦合:通过接口编程,降低组件间的耦合度
四、依赖注入的重要性
在静态代理中,使用setter方法注入依赖比直接创建实例有以下优势:
- 灵活性:可以在运行时动态设置依赖
- 可测试性:便于单元测试时注入模拟对象
- 可扩展性:支持不同的实现类注入
总结
今天介绍的内容涵盖了Spring开发的核心概念:
- 注解开发简化了配置,提高了开发效率
- JavaConfig提供了类型安全的配置方式
- 静态代理模式展示了如何在不修改原有代码的情况下增强功能
这些知识点相互关联,共同构成了Spring框架的基础。

被折叠的 条评论
为什么被折叠?



