Spring IoC-DI-AOP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fivehundredyearsago/article/details/80757776

控制反转(Inversion of Control-IoC)和依赖注入(dependency injection-DI)

IoC和DI在Spring环境下是同等概念,控制反转是通过依赖注入实现的,所谓依赖注入指的是容器,负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决依赖。依赖注入的主要目的是为了解耦,体现了一种“组合”的概念,如果使用继承父类的方式,子类将与父类耦合,而组合另外一个类择使耦合度大大降低。

Spring IoC容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到需要的bean中,Spring提供XML、注解、Java配置、groovy配置实现Bean的创建和注入,统称为配置元数据。所谓元数据即描述数据的数据,元数据本身不具备任何可执行能力,只能通过外界代码来对这些元数据进行解析后,进行操作,Spring容器解析这些配置元数据进行Bean初始化、配置和管理依赖。

声明Bean的注解:

-@Component:组件,没有明确的角色。

-@Service:在业务逻辑Service层使用。

-@Repository:在数据访问DAO层使用。

-@Controller:在展现层MVC使用。

注入Bean的注解:

-@Autowired:类型匹配注入。

-@Resource:名称匹配注入。

-@Inject:类型注入。


Java配置

Java配置通过@Configuration和@Bean来实现:

@Configuration:声明当前类是一个配置类,相当于一个Spring配置的xml文件。

@Bean:注解在方法上,声明当前方法的返回值为一个Bean。


AOP

面向切面编程,相对于OOP面向对象编程。 其实我们都是面向薪资编程的!!!

Spring AOP的存在目的就是为了解耦,AOP可以让一组类共享相同的行为,在OOP中只能通过继承类和实现接口,来使代码的耦合度增强,且类都是单继承,阻碍更多行为添加到一个类上,AOP弥补了OOP的不足。

Spring 支持AspectJ的注解式切面编程:

1、使用@Aspect声明是一个切面。

2、使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。

3、其中@After、@Before、@Around参数的拦截规则为切点(PointCut),为了使切点复用,可使用@PoinCut专门定义拦截规则,让后在@After、@Before、@Around的参数中调动。

4、其中符合条件的每一个被拦截处为连接点(JoinPoint)。

Bean的Scope

Scope描述的是Spring容器如何新建Bean的实例:

1、Singleton:一个Spring容器中只有一个Bean实例,此为Spring默认配置,全容器共享一个实例。

2、Prototype:每次调用新建一个Bean实例。

3、Request:Web项目中,给每一个http request新建一个Bean实例。

4、Session:Web项目中,给每一个http session新建一个Bean实例。

5、GlobalSession:这个只在portal应用中有,给每一个global http session新建一个Bean实例。

另外,在Spring Batch中还有一个Scope是使用@StepScope。


Bean的初始化和销毁

Spring对Bean的生命周期的操作提供了支持:

1、Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destroy-method)。

2、注解方式:利用JSP-250的@PostConstruct和@PreDestroy。@PostConstruct在构造函数执行完之后执行。@PreDestroy在Bean销毁之前执行。


Profile

Profile为在不同环境下使用不同的配置提供了支持:

1、通过设定Environment的ActiveProfile来设定当前context需要使用的配置环境,在开发中使用@Profile注解类或者方法,达到在不同环境下选择实例化不同的Bean。

2、通过设定jvm的spring.profile.active参数来设置配置环境。

3、Web项目设置在Servlet的context parameter中。


事件(Application Event)

Spring的事件(Application Event)为Bean与Bean之间的消息通信提供了支持,当一个Bean处理完一个任务后,希望另外一个Bean知道并能做相应的处理,这时需要另外一个Bean监听当前Bean所发送的事件。

Spring 的事件一定要遵循如下流程:

1、自定义事件,继承ApplicationEvent。

2、定义事件监听器,实现ApplicationListener接口,并指定监听的事件类型。

3、使用容器发布事件,使用onApplicationEvent方法对消息进行接受处理。


没有更多推荐了,返回首页