时间:2023-01-30 10:34:48 | 栏目:JAVA代码 | 点击:次
Why Spring?
Spring makes programming Java quicker, easier, and safer for everybody. Spring's focus on speed,
simplicity, and productivity has made it the world's most popular Java framework
Spring是一种轻量级的、开源的框架。
Spring为简化企业级开发而生,使用Spring开发可以将Bean对象,Dao组件对象,Service组件对象等交给Spring容器来管理,这样使得很多复杂的代码在Spring中开发却变得非常的优雅和简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。
Spring是一个IOC(DI)和AOP容器框架。
Spring的优良特性
非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API
控制反转:IOC――Inversion of Control,指的是将对象的创建权交给Spring去创建。使用Spring之前,对象的创建都是由我们自己在代码中new创建。而使用Spring之后。对象的创建都是由给了Spring框架。
依赖注入:DI――Dependency Injection,是指依赖的对象不需要手动调用setXX方法去设置,而是通过配置赋值。
面向切面编程:Aspect Oriented Programming――AOP
容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。
一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring 自身也提供了表述层的SpringMVC和持久层的Spring JDBC)
IOC
IOC 是一种设计的思想,使用这种的设计的思想实现的框架就是IOC容器、通过这个容器可以实现对bean的管理、也就是对对象的生命周期的管理、也可以管理对象之间的依赖关系。IOC 是Spring用来实现对象的创建的、也就是将对象的创建交给Spring来实现的、降低了类和类之间的耦合度。
IOC 的 思想依赖于IOC容器的来实现的,IOC的底层就是对象工厂。
Spring提供了两种实现IOC的方法、一种是BeanFactroy来实现的、一种是ApplicationContext来是实现的。
IOC的底层原理:IOC的底层就是使用xml、工厂模式、反射的技术来实现。
DI
实现了IoC思想的容器就是IoC容器,比如:SpringFremework, Guice(Google开源的轻量级DI框架)
AOP
AOP(Aspect-Oriented Programming,面向切面编程)是对传统传统 OOP(Object-Oriented Programming,面向对象编程)的补充,属于一种横向扩展。其将与核心业务无关的代码,如日志记录、性能监控、事务处理等从业务逻辑代码中抽离出来,进行横向排列,从而实现低耦合,提高开发效率。
加载类路径下的beans.xml 文件
通过配置文件完成对bean的初始化
扫描路径下org.example添加四个注解的类
四个注解都可以用来将当前的类注入到bean中去、将类交给spring来托管。
@Component是基础注解,表示一个 JavaBean 可以被注入到 Spring 容器中。
为了更好的表示 Web 服务中的三层结构,所以就额外的引出了另外的三种注解分别用在三层结构中进行标注:
@Controller 用在表现层,对来自前端的请求进行转发处理与重定向。
@Repository 用在持久层,标注 DAO 类,表示这个类可以对数据库进行数据的读取或者写入。
@Service 用在业务层,用来处理业务逻辑。
引入后三个注解之后,就实现了将处理前端请求、处理业务逻辑、处理数据库读写这三个基本任务进行了解耦,方便程序的编写和项目维护。
也可以使用@Bean注解
当前类被 Spring 扫描到时,可以在方法上使用 @Bean 注解,通过方法返回类型,也可以定义、注册Bean对象,默认使用方法名作为Bean的名称。
@Configuration
在类被Spring扫描到时,使用 @Configuration 注解,可以注册一个配置类到容器中。配置类一般用来
可以使用FactoryBean接口:先定义一个Bean,实现FactoryBean接口,指定泛型为要注册的类,通过getObject方法的返回
可以在属性上使用 @Autowired 注解
也可以使用setter方法上使用 @Autowired 注解
也能使用构造方法注入
使用 @Qualifier(“名称”) 注解、注入指定的bean
@Controller public class LoginController { // 第一种注解的方式属性注入 // @Autowired @Resource private LoginService loginService; //第二种的注入的方式使用set方法来实现注入 public void setLoginService(LoginService loginService) { this.loginService = loginService; } //第三中的方法、使用构造函数来实现注入、使用构造函数的方式来实现注入的话、不需要@Autowire注解 public LoginController(LoginService loginService) { this.loginService = loginService; } public void say() { loginService.say(); } @Bean public User user1() { User user = new User(); user.setName("ni"); ; user.setPassword("wo"); return user; } @Bean public User user2() { User user = new User(); user.setName("y"); user.setPassword("y"); return user; } }