教学内容
- Spring中的ioc常用注解
- 案例使用xml和注解方式实现单标的CRUD操作
持久层技术选择:dbutils - 改造基于注解的ioc案例,使用纯注解方式实现
spring 的一些新注解使用 - spring和Junit的整合
使用注解前配置xml
core搜索xmlns:context
就有了
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.chajiu.service"></context:component-scan>
</beans>
四个对应-注解和xml标签对应
- 将该类创建为bean:同
<bean>
@Component
:把当前类对象存入spring容器- 属性value:指定key名,不写默认key为小写类名。
@Component(value = "accountServicelmpl")
或者@Component("accountServicelmpl")
- 属性value:指定key名,不写默认key为小写类名。
@Controller
:用于表现层@Service:
用于业务层@Repository
:用于持久层- 以上三个注解和
@Component
的作用和属性一模一样 - 他们是spring框架为我们提供三层的明确注解,使我们对三层结构更加清晰
- 用于注入参数:可以给成员变量注入,也可以给任何方法注入参数,spring会自动寻找合适的bean注入参数。同
<property>
@Autowired
- 自动按照类型注入,只要容器中有唯一的一个bean类型和要注入的变量类型相匹配,就可以注入成功
- 出现位置:变量上或者方法上
- 如果有多个类型匹配时,按照注入的变量的名称匹配,再不唯一就报错
@Qualifier
- 在按照类型注入的基础上按照名称注入,给类成员注入时不能单独使用(必须配合
@Autowired
),但是给类方法注入可以单独使用 - 属性
value
,指定bean的id
- 在按照类型注入的基础上按照名称注入,给类成员注入时不能单独使用(必须配合
@Resource
- 作用:直接按照bean的id注入,可以独立使用
- 属性:name,指定bean的id
- 上述注解只能用于注入Bean类型,无法注入基本数据类型和String
- 且集合类型必须通过xml来实现
@Value
- 用于注入基本数据类型和String
- 属性value:用于指定数据的值,可以使用Spring中的SpEL(Spring的el表达式)
- SpEL写法:
${表达式}
- SpEL写法:
用于改变作用范围:同
<bean>
中的scope
属性一样@Scope
- 指定bean的作用范围,写在类前
- 属性:value,指定范围,常用取值:
singleton
,prototype
@Component(value = "accountService")
@Scope("prototype")
public class AccountServicelmpl implements IAccountService {
和生命周期相关:同
<bean>
中的init-method
和destroy-method
一样
Spring新注解-替代xml作用
参考Spring入门(三):通过JavaConfig装配bean
xml中,context:component-scan
无法去除,且对jar中的类无法使用注解替代Bean标签,于是有两个新注解,帮助完全替代xml
。
- 使用一个配置类,他的作用和bean.xml完全一样
- 新注解:
@Configuration
- 作用:指定当前类是个配置类,写在类名上面
@ComponentScan
- 作用:通过注解指定spring需要扫描的包。与
<context:component-scan base-package="com.chajiu"></context:component-scan>
相同 - 属性:
value/basePackage
:指定要扫描的包
- 作用:通过注解指定spring需要扫描的包。与
@Bean
- 将当前方法的返回值作为Bean对象传入spring的ioc容器中
- 属性
- name:用于指定Bean的name,如果不写,默认Bean对象的name为这个类方法名。
- 细节:如果你的方法有参数,spring会去容器中查找有无Bean对象,自动注入参数依赖,同
@Autowired
配置应该注意xml和注解配合使用。
- 自己的类注册为bean可以使用@component等注解
- jar包中的类注册为bean只能使用xml配置
或用配置类的@Bean获取