Spring framework 笔记

1.依赖注入(Dependency Injection)是控制反转(Inversion of control)的一种实现形式


2.JNDI Java Naming and Directory Interface java命名和目录服务接口(后期继续了解,一知半解)


3.EJB,JMX,POJO,Portlet


4.注入bean方式

  • 注解方式注入 @Service @Component...(需要@ComponentScan 扫描装载)
  • java配置 @Bean形式装载

5.实现aop

  • @Pointcut("@annotation(com.shang.spring.learn.aop.Action)") public void annotationPoinCut(){} //插入切入点

  • @After("annotationPointCut()")&@Before("annotationPointCut()")定义切片位置,并在此注解下定义function

  • function如下 MethodSignature signature=(MethodSignature)joinPoint.getSignature();
    Method method=signature.getMethod();
    Action action=method.getAnnotation(Action.class);
    System.out.println("注解拦截器:" +action.name());

  • @EnableAspectJAutoProxy注解配置开启aop


6.el @Value


7.bean生命周期

  • @Bean(initMethod = "init",destroyMethod = "destory")
  • @PostConstruct @PreDestory

  1. @Scope 配置bean的生成策略(单例等)

9.@Profile指定环境context.getEnvironment().setActiveProfiles("prod");设置prod环境


10.event 订阅-通知

  • 创建evnet 继承ApplicationEvent
  • 创建listerner 实现ApplicationListener
  • 创建publisher 注入applicationContext applicationContext.publishEvent(new Event(this))

11.开启异步需要使用@EnableAsync注解进行配置,同时实现AsyncConfigurer接口,返回一个线程池,需要异步执行的方法需要@Async


12.开启计划任务需要@EnableScheduling注解进行配置,一般需要TaskScheduler bean,通过@Scheduled注解标识定时任务,支出多种参数,支持corn


13.@Conditional注解,根据condition条件实例化bean

  • 先创建condition条件 实现Condition接口
  • 创建公共接口,根据不同条件实现这一接口
  • @Conditional(WindowsCondition.class)参数为Condition的类类型,返回bean

14.组合注解,组合注解会覆盖组合注解引入的注解的参数(key要一致,使用@AliasFor注解的参数要全部覆盖,为什么呢还有待商榷)


15.@ComponentScan注解默认扫描当前包


16.以注解的方式实现@Enable*

  • 直接import的方式
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(ImportConfig.class)
public @interface ImportClassConfigAnnotation {
}

@Configuration
@ComponentScan
public class ImportConfig {
    @Bean
    public ImportBean getTestBean(){
        ImportBean bean=new ImportBean();
        bean.setContext("nihao");
        return bean;
    }
}
  • 实现ImportSelector
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(ConditionSelector.class)
public @interface ConditionConfigAnnotation {
    String value() default "";
}

public class ConditionSelector implements ImportSelector {
    public static String PACKAGE_NAME = "com.shang.spring.learn.enableannotation.";

    @Override
    public String[] selectImports(final AnnotationMetadata importingClassMetadata) {
        Map map = importingClassMetadata.getAnnotationAttributes(ConditionConfigAnnotation.class.getName());
        return new String[]{ConditionSelector.PACKAGE_NAME + map.get("value").toString()};
    }
}

  • 实现ImportBeanDefinitionRegistrar
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(RegisterDefinitionRegistor.class)
public @interface RegisterConfigAnnotation {
    String value() default "默认";
    String name() default "default";
}


public class RegisterDefinitionRegistor implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(final AnnotationMetadata importingClassMetadata, final BeanDefinitionRegistry registry) {
        String context = importingClassMetadata.getAnnotationAttributes(RegisterConfigAnnotation.class.getName()).get("value").toString();
        String name = importingClassMetadata.getAnnotationAttributes(RegisterConfigAnnotation.class.getName()).get("name").toString();
        BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(RegisterBean.class);
        //添加属性
        definitionBuilder.addPropertyValue("context", context);
        //添加构造参数(顺序添加)
        definitionBuilder.addConstructorArgValue(name);
        registry.registerBeanDefinition("registerBean", definitionBuilder.getBeanDefinition());
    }
}

目前看后两种方式区别就是最后一种方式可以手动控制装载bean的属性,可以使用含参的构造方法。前一种方式目前没看到可以调用含参构造器的方法,也没看见可以修改bean属性的方法。

demo地址JavaEE开发的颠覆者Spring Boot demo升级练习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,100评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,340评论 6 342
  • 什么是Spring Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Jav...
    jemmm阅读 16,824评论 1 133
  • 《Spring in Action》读书笔记和总结。Spring官网: spring.io Spring的底层功能...
    Taeyeon37阅读 584评论 0 2
  • 基础动画,话不多说,直接来看例子:UIView *animatView = [[UIView alloc] ini...
    高手世界阅读 492评论 0 0

友情链接更多精彩内容