spring纯注解开发-基本注解。
目录
这个阶段配置文件为主。
spring开发过程中多配置文件的形式
1,扫描包注解
<!-- 写包名,扫描包下的所有注解-->
<context:component-scan base-package="core"/>
2,引用外部spring配置文件()
<import resource="classpath:applicationContext.xml"/>
spring基础注解
@Component,@Service,@Repository,@Controller。=相当于bean的自动配置,默认id是小驼峰。【也可以在value中指定id】
@Scope: @Scope("singleton")
@Lazy 懒加载
spring生命周期相关的方法。
把接口方法换成类中方法上的注解。
InitializingBean <bean init-method> [email protected]
DisposableBean <Bean destory-method>[email protected]
注意:这两个注解是javaee规范提供的。
自定义类型的注入。
@AutoWired 自定义类型的注入。
放在属性或者set方法上。
若想指定id,则要加@Qualifier("id")。
javaee规范注解@[email protected][email protected](id),但是需要额外导包【不推荐使用】。
@ValueJDK基本类型的注入
(8中基本类型+String),@Value("${propertyName}") 但是注入不了集合类型!
代码:
@Component
public class Person {
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
@Value("${birthday}")
private Date birthday;
}getter和setter略。
XML中
<!-- 写包名,扫描包下的所有注解-->
<context:component-scan base-package="core"/>
<!-- 导入外部配置文件-->
<context:property-placeholder location="classpath:info.properties"/>
test代码:
/**
* 用于测试:spring工厂得到对象实例
*/
@org.junit.Test
public void test1(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
Person person = (Person) ctx.getBean("person");
System.out.println(person);
System.out.println(person.getName());
System.out.println(person.getAge());
System.out.println(person.getBirthday());
}
结果:
扫描注解详情
<context:component-scan base-package="core"/>表示扫描当前包及其子包。
排除策略
aspectj:切入点表达式,主要是指定包;
assignable:课指定,指定类名;
annotation:指定注解类型;
custom:自定义排除策略【主要是框架底层开发】
Regex:正则表达式【不常用】
包含策略
和排除策略使用的参数一样,语义相反。
首先先让spring默认扫描策略失效【因为是自己指定的扫描策略】
<context:component-scan base-package="core" use-default-filters="false">
使spring默认扫描策略失效。(毕竟是自己指定的扫描。。。)
对于注解开发的思考!
配置互通:spring的配置文件和注解是互通的。
配置文件的权限最高【为了解注解的耦合】。
什么情况下使用注解?什么情况下使用配置文件?
我们自己写的类用注解,有些类不是我们写的,例如SqlSessionFactoryBean【spring整合mybatis的类】需要配置文件写。
我们此时的注解只是一些简单注解,不能对复杂的类型进行属性注入【比如所集合类型】,还不能完全脱离配置文件。
敬请期待:spring高级注解。
上一篇: Spring纯注解开发
下一篇: spring纯注解开发-高级注解