Spring框架的四大原则
1)使用POJO进行轻量级和最小侵入式开发。
2)通过依赖注入和接口编程实现松耦合。
3)通过AOP和默认习惯进行声明式编程。
4)使用AOP和模板(template)减少模块化代码。
一、概念
控制反转(Inversion of Control-IOC)== 依赖注入(dependency injection-DI)
控制反转是通过依赖注入实现的。
Spring IOC容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到需要的Bean中。
所谓依赖注入是指通过spring容器负责创建对象和维护对象之间的关系;而不是传统模式对象本身通过new自身创建和解决自身依赖关系。
Spring提供使用XML、注解、Java配置、groovy配置实现Bean的创建和注入。
拓展:XML、注解、Java配置。都被称为配置元数据,所谓元数据即描述数据的数据(这就是所谓的配置)。其本身并不具备任何执行能力,只能通过外界代码来解析这些元数据进行有意义的操作;比如spring容器解析这些配置数据进行Bean的初始化、配置、管理、注入。。。
二、几个相关注解
1)声明Bean的注解:(以下注解是等效的 根据需求选用)
@Component 组件,没有明确的角色。
@Service 在业务逻辑层(service层)使用。
@Repository在数据访问层(dao层)使用。
@Controller在展示层(MVC——>SpringMVC)使用。
2)注入Bean的注解:(以下注解是等效的 根据需求选用)
@Autowired Spring提供的注解。
@Inject JSR-330提供的注解。
@Resource JSR-250提供的注解。
三、Demo
(1)功能类的Bean(以下是代码块: (⊙﹏⊙)b体谅一下 还不会用代码块)
package com.springioc.test;
import org.springframework.stereotype.Service;
//声明FunctionService这个类是Spring管理的一个Bean
@Service
public class FunctionService(){
public String printHappy(String UesrName){
return UesrName+"Success, good fun!";
}
}
(2)使用功能类的Bean(以下是代码块: (⊙﹏⊙)b体谅一下 还不会用代码块)
package com.springioc.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//声明FunctionService这个类是Spring管理的一个Bean
@Service
public class UseFunctionService(){
//将FunctionService实体Bean注入到本(UseFunctionService)Bean中,
//使其具备FunctionService这个Bean 的功能
@Autowired
FunctionService functionService
public String printHappy(String UesrName){
return functionService.printHappy(UesrName);
}
}
(3)配置类(以下是代码块: (⊙﹏⊙)b体谅一下 还不会用代码块)
package com.springioc.test;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
//声明Config这个类是一个配置类(详情见后一节)
@Configuration
//使用@ComponentScan,自动扫描com.springioc.test此包名下所有@Service、
//@Component、@Repository、@Controller的类,并对其实例化。
@ComponentScan("com.springioc.test")
public class Config(){
}
(4)运行main方法
package com.springioc.test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main(){
public static void main(String[] args){
//使用Spring AnnotationConfigApplicationContext容器读取Config这个配置类
AnnotationConfigApplicationContext comtext = new AnnotationConfigApplicationContext(Config.class);
//获取context容器中的实例化Bean UseFunctionService
UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
system.out.println(useFunctionService.printHappy("冉玉琦"));
context.close();
}
}