spring4.x学习归纳

spring历程概述

一、xml配置
spring1.x,基本是用xml配置bean,频繁的在xml和配置文件中切换。
二、注解配置
spring2.x,基于JDK1.5的注解支持,采用声明Bean的直接(@Service、@Component)减少配置,最终出现基本数据配置采用xml,业务配置用注解。
三、java配置
spring3.x,Spring提供java配置的能力,减小xml的依赖,统一使用注解实现。

spring搭建依赖

主体基于注解的使用。版本采用 - 4.2.5.RELEASE
构建项目(采用maven简历依赖关系)
依赖包:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.5.RELEASE</version>
    </dependency>

spring基础特性

一、控制翻转(IOC)和依赖注入
依赖注入:容器负责创建对象和维护对象之间的依赖关系。主要目的是为了解耦,实现**“组合”**的理念
控制翻转:通过依赖注入实现。两者概念等同。
声明Bean:
— 业务使用注解
@Component:通用
@Service:业务逻辑层
@Repository:数据访问层
@Controller:展现层
— 全局配置使用注解
@Bean:注解在方法上,方法返回值为Bean,一般结合@Configuration使用(@Configuration:声明在类上,表明当前类为配置类,相当于spring配置的xml文件;@ComponentScan:配合@Configuration使用,定义配置获取bean的路径层,如com.ly可获取com.ly路径下所有bean)。@bean中可以直接使用另一个bean,可以使用方法调用和方法名调用。

注入Bean
@Autowired:spring默认注解
@Inject:JSR-330提供的注解(spring的一种标准)
@Resource:JSR-250提供的注解
二、面向切面编程(AOP)
目的:让一组类共享相同行为,实现了解耦。
实现:可以使用注解切入,也可以直接使用方法切入。最终实现取决于切点的实现,与注解和方法本身无关。
1、定义一个切点实现类。声明类是切点,@AspectJ ,并交由spring管理 @Component
2、1)注解实现:定义方法,并注上@PointCut("@annotation(com.ly.aop.action)"),如:
在aop;路径下创建了Action注解,@After带入方法,实现after方法,JoinPoint 可以直接获取当前注解和方法信息。

@PointCut("@annotation(com.ly.aop.action)")
public void annotationPointCut(){}
@After("annotationPointCut()")
public void after(JoinPoint j){
	MethodSignature ms = (MethodSignature)j.getSignature();
	Method m = ms.getMethod();
	Action a = m.getAnnotation(Action.class);
	dosomething();//实现切面逻辑
}

2)方法实现:不需要注解声明切点,可直接获取aop下DemoService类所有方法

@Before("execution(*com.ly.aop.DemoService.*(...))")
public void after(JoinPoint j){
	MethodSignature ms = (MethodSignature)j.getSignature();
	Method m = ms.getMethod();
	dosomething();//实现切面逻辑
}

spring常用配置

一、Bean的Scope
作用:spring创建bean的生命周期。
@Scope(“singleton”):一个容器只有一个Bean,spring默认;
@Scope(“prototype”):每次调用创建一个Bean;
@Scope(“request”):每次请求创建一个Bean,针对web项目;
@Scope(“session”):每次会话创建一个Bean,针对web项目;
二、Bean的value
作用:注入默认资源
@Value(“I am YungLee2018”):注入字符串;
@Value("#{systemProperties[‘os.name’]}"):获取系统属性;
@Value("#{T(java.lang.Math).random()*100.0}"):表达式结果(EL表达式)
@Value("#{demoService.name}"):bean的属性
@Value(“classpath:com/ly/ly.txt”):文件资源
@Value(“http//:www.baidu.com”):网址资源
@Value("${book.name}"):配置文件,默认文件application.properties;若想加载自定义配置文件:Bean上方配置@PropertySource(“classpath:com/ly/ly.properties”),同时初始化配置PropertySourcesPlaceholderConfigurer。获取配置文件也可以通过注入Environment 类(已自动配置)e.getProperty(“book.author”)
三、Bean的初始化和销毁
1、直接在注解处操作,@Bean注解声明的Bean:通过在@Bean中两个属性,initMethod="init"对应Bean中init方法,初始化时执行;destroyMethod="destroy"对应Bean中destroy方法,销毁时执行。
2、直接在Bean类中操作:@PostConstruct 初始化执行,@PreDestroy 销毁时执行。
四、Bean的环境配置
主体分为:开发环境(dev)、生产环境(prod)
目的:希望开发和生产对应不同的Bean。
在@Bean同级添加@Profile(“dev”)开发使用的bean;添加@Profile(“prod”)生产使用的bean;需要在环境变量中更改activeProfiles 参数;
五、Bean的监听
目的:一个bean执行结束后启动另一个bean的执行,采用监听方式完成。
1、定义事件类;继承ApplicationEvent,实现事件定义。
2、事件监听bean;实现接口ApplicationListener,对应事件类。内部实现onApplicationEvent(T event)处理事件。
3、触发监听bean;内部注入ApplicationContext,此类调用publishEvent(new T());定义事件内容和发布。

Spring深入运用

一、spring aware
目的:bean本身对于我们而言是透明的,但有时需要获取bean在Spring容器中的资源。
bean类实现spring提供的接口即可获取:
BeanNameAware:获取容器中bean的名称
ApplicationContextAware:获取spring容器的所有服务
二、多线程
目的:bean中方法实现异步操作。
1、开启,在配置类添加@EnableAsync;
2、配置类实现接口:AsyncConfigurer,配置线程池
3、在bean中方法加上@Async,即方法时异步的;直接给Bean类加上,bean中所有方法都是异步的。
三、计划任务
目的:bean中方法在初始化后,自动执行
1、配置类添加开发计划:@EnableScheduling
2、在bean类中方法添加@Schedule(fixedRate = 5000);属性介绍:fixedRate,每隔固定时间执行,cron,按指定时间执行,每天11点28分,

cron=“0 28 11 ? * *”

四、条件注解
目的:满足某个特定条件创建一个特定的bean;和@profile类似。
1、bean类实现Condition接口,重写matchs方法,返回布尔值
2、在@Bean生成时,添加@Conditional(bean类.class),true,则实例化。
五、组合注解和元注解
元注解:可以注解到别的注解上的注解。
组合注解:被注解的注解。
六、@Enable*注解原理
作用:开启一项功能
内部实现:@Enable*注解中包含@Import,@Import是用来导入配置类的。
import的类包含三种方式:
1、普通直接配置bean
2、条件配置bean
3、动态配置bean
七、测试
maven项目默认分test和main,test用于测试。
test maven支持

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>

test创建测试类
@RunWith(SpringJUnit4ClassRunner.class) //提供spring TestContext Framework功能
@ContextConfiguration(classes={TestCofig.class}) //配置类加载
@ActiveProfiles(“dev”) //配置活动的profile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值