基于注解创建对象有四个:
@Component:修饰类
@Repository:修饰类,应用于持久层
@Service:修饰类,应用于业务层
@Controller:修饰类,应用于控制层
作用:可以将对象创建并且加入到IOC容器中
代替:<bean class="类全名字符串"/>
value:可以给对象取名字,默认名是首字母小写的类名
警告:使用了任何IOC注解必须在配置文件中添加注解支持,语句为:<context:component-scan base-package="指定使用注解的包路径, 可以使用,号分隔"/>
依赖注入的注解:前提:对象必须交给IOC容器管理
依赖注入常用注解:
注解名 | 说明 |
---|---|
@Value | 位置: 属性, 方法, 参数 作用: 注入配置文件的参数 或 基本数据类型数据 |
@Autowired | 位置: 属性, 方法, 参数 作用: 根据对象(类型+名称)注入属性值 意义: 代替bean标签中的子标签property required: 注入的对象是否必须 (true: 非空) |
@Qualified | 位置: 属性, 方法, 类 作用: 只根据对象名称注入,value: 注入指定名称的对象 一般配合@Autowired使用 |
@Resource | 位置: 属性, 方法, 类 相当于@Autowired+@Qualifier 警告:JDK1.8以后不支 |
生命周期的相关注解:
@PostConstruct: 修饰方法,方法在构造方法之后执行
@PreDestroy: 修饰方法,方法在容器关闭之前执行
@Lazy: 修饰类,设置对象创建的时间,true:延迟到使用时创建,默认值,false:容器启动时创建
@Scope: 修饰类,设置类的对象是多例还是单例。prototype:多例 singleton:单例 默认值
纯注解开发:
纯注解也可以理解为零配置。
改造目标:去除所有的配置文件。
核心思想:找到相应的注解 代替 配置文件已经配置文件中的配置项。
使用注解代替配置文件的相关剩余注解:前提:创建一个类来代替配置文件
1.配置文件的替代注解:@Configuration 作用:修饰类,将类设置Spring配置类,代替applicationContext.xml文件
2.注解扫描配置的替代注解:@ComponentScan 作用:修饰类,指定扫描的包路径
3.加载配置文件的替代注解:@PropertySource 作用:修饰类,导入外部的配置文件,类似与以.properties为命名的配置文件
4.导入配置文件的替代注解:@Import 修饰类,导入其它Spring配置类
5.第三方对象创建的替代注解:@Bean 修饰方法,将方法返回的返回值添加到IOC容器中 细节:当方法使用@Bean之后,参数列表中的对象将会从容器中获取
Spring整合Junit框架:
Junit单元测试的问题:每次测试都需要手动创建IOC容器
例子:
/**
* 测试CRUD工程的代码.
* 当前相当于是模拟视图层/控制层
* @RunWith: 修饰类
* 作用: 指定启动器
* @ContextConfiguration: 修饰类
* 作用: 配合@RunWith使用指定一个创建容器的配置(包含配置类和配置文件)
*/
@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = "classpath:applicationContext.xml")
@ContextConfiguration(classes = SpringConfig.class)
public class SpringTests {
@Autowired
AccountServiceImpl accountService;
@Test
public void testSave (){
Account account = new Account();
account.setId(10);
account.setUid(10);
account.setMoney(10D);
accountService.save(account);
}
@Test
public void testDel (){
Account account = new Account();
account.setId(10);
account.setUid(10);
account.setMoney(10D);
accountService.del(account);
}
@Test
public void testUpdate (){
Account account = new Account();
account.setId(10);
account.setUid(10);
account.setMoney(11D);
accountService.update(account);
}
@Test
public void testFindById (){
Account account = new Account();
account.setId(10);
Account acc = accountService.findById(account);
System.out.println(acc);
}
}