Spring5 框架, 要点, IOC (pdai)

Spring

ORM/DAO -> POJO (IOC容器) -> Service -> Controller

  • 非侵入式:基于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)

Core Container: beans, core, context (Application Context), SpEL
Data Access/Integration: JDBC/ORM (Object Relational Mapping)/OXM (Object/XML)/JMS (服务消息)/Transaction
Web: web, servlet, websocket, webflux (完全异步且非阻塞), Portlet
AOP, Aspects, Instrumentation (类工具的支持和类加载器的实现), Messaging, JCL (日志框架集成的模块)
Test: Junit, TestNG

 /**
* aspect for every methods under service package.
*/
@Around("execution(* tech.pdai.springframework.service.*.*(..))")
public Object businessService(ProceedingJoinPoint pjp) throws Throwable {
    // get attribute through annotation
    Method method = ((MethodSignature) pjp.getSignature()).getMethod();
    System.out.println("execute method: " + method.getName());

    // continue to process
    return pjp.proceed();
}

@Configuration: These classes consist principally of @Bean-annotated methods that define instantiation, configuration, and initialization logic for objects that are managed by the Spring IoC container.

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }

}

@Service annotates classes at the service layer. 它将根据用户请求请求@Repository

@Repository annotates classes at the persistence layer, which will act as a database repository

IOC: 用户管理Bean转变为框架管理Bean
DI: 应用程序代码从Ioc Container中获取依赖的Bean,注入到应用程序中
IOC Config:XML, 注解, Java
依赖注入方式:构造方法注入(Construct注入),setter注入,基于注解的注入(接口注入)
@Autowired(自动注入):Constructor,byType,byName
构造器注入的方式能够保证注入的组件不可变,并且确保需要的依赖不为空
@Target(ElementType.CONSTRUCTOR) #构造函数
@Target(ElementType.METHOD) #方法
@Target(ElementType.PARAMETER) #方法参数
@Target(ElementType.FIELD) #字段、枚举的常量
@Target(ElementType.ANNOTATION_TYPE) #注解

@Resource
@Target(ElementType.TYPE) #接口、类、枚举、注解
@Target(ElementType.FIELD) #字段、枚举的常量
@Target(ElementType.METHOD) #方法

@Inject
@Target(ElementType.CONSTRUCTOR) #构造函数
@Target(ElementType.METHOD) #方法
@Target(ElementType.FIELD) #字段、枚举的常量

  • @Autowired、@Inject用法基本一样,不同的是@Inject没有required属性
  • @Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的
  • @Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Named一起使用,@Resource则通过name进行指定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值