Spring框架如何应用
- 首先,对于Spring进阶,直接去看IOC和AOP,存在一个断层,所以需要整体上构建对Spring框架认知上进一步深入,这样才能构建知识体系。
- 其次,很多开发者入门都是从Spring Boot开始的,他对Spring整体框架底层,以及发展历史不是很了解; 特别是对于一些老旧项目维护和底层bug分析没有全局观。
- 再者,Spring代表的是一种框架设计理念,需要全局上理解Spring Framework组件是如何配合工作的,需要理解它设计的初衷和未来趋势。
Spring框架设计如何逐步简化开发的
通过上述的框架介绍和例子,已经初步知道了Spring设计的两个大的要点:IOC和AOP;从框架的设计角度而言,更为重要的是简化开发,比如提供更为便捷的配置Bean的方式,直至0配置(即约定大于配置)。这里我将通过Spring历史版本的发展,和SpringBoot的推出等,来帮你理解Spring框架是如何逐步简化开发的。
Java 配置方式改造
在前文的例子中, 通过xml配置方式实现的,这种方式实际上比较麻烦; 我通过Java配置进行改造:
- User,UserDaoImpl, UserServiceImpl,LogAspect不用改
- 将原通过.xml配置转换为Java配置
package com.hello.spring.config;
import com.hello.spring.aspect.LogAspect;
import com.hello.spring.dao.impl.UserDaoImpl;
import com.hello.spring.service.impl.UserServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@EnableAspectJAutoProxy
@Configuration
public class BeansConfig {
@Bean("userDao")
public UserDaoImpl userDao(){
return new UserDaoImpl();
}
@Bean("userService")
public UserServiceImpl userService(){
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(userDao());
return userService;
}
@Bean("logAspect")
public LogAspect logAspect(){
return new LogAspect();
}
}
在ConfigAPP中加载BeansConfig的配置
package com.hello.spring;
import com.hello.spring.config.BeansConfig;
import com.hello.spring.entity.User;
import com.hello.spring.service.impl.UserServiceImpl;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
public class ConfigAPP {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfig.class);
UserServiceImpl userService = context.getBean(UserServiceImpl.class);
List<User> userList = userService.findUserList();
for (User user : userList){
System.out.println(user);
}
}
}
整体结构和运行app
注解配置方式改造
更进一步,Java 5开始提供注解支持,Spring 2.5 开始完全支持基于注解的配置并且也支持JSR250 注解。在Spring后续的版本发展倾向于通过注解和Java配置结合使用.
-
BeanConfig 不再需要Java配置
-
UserDaoImpl 增加了 @Repository注解
-
UserServiceImpl 增加了@Service 注解,并通过@Autowired注入userDao.
-
在App中扫描tech.pdai.springframework包
SpringBoot托管配置
Springboot实际上通过约定大于配置的方式,使用xx-starter统一的对Bean进行默认初始化,用户只需要很少的配置就可以进行开发了。
这个因为很多开发者都是从SpringBoot开始着手开发的,所以这个比较好理解。我们需要的是将知识点都串联起来,构筑认知体系。
r统一的对Bean进行默认初始化,用户只需要很少的配置就可以进行开发了。
这个因为很多开发者都是从SpringBoot开始着手开发的,所以这个比较好理解。我们需要的是将知识点都串联起来,构筑认知体系。