一、 @Component
1.Component
标记了注解, 默认的名称是:简单类名,首字母小写UserDaoImpl -> userDaoImplUserServiceImpl -> userServiceImplComponent可以使用value属性指定对象的名称,相当bean标签的id属性
Component注解有三个子注解(注意:Component注解和三个子注解作用一致)@Service: 业务层@Controller : 表现层@Repository: 持久层
Component可以使用value属性指定对象的名称,相当bean标签的id属性
测试类中
<context:component-scan base-package="com.itheima"><!--include : 包含--><!--filter: 过滤--><!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" ></context:include-filter>--><!--exclude: 排除--><!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"></context:exclude-filter>--></context:component-scan>
开启注入扫描, 指定扫描的包, 扫描 Component注解
base-package: 指定扫描的包, 扫描com.itheima 包及其子包
如果将数据源和注入分开 context 必须写在主中
2.Autowired: 自动装配
@Autowired: 自动装配
* 可以直接把容器中的对象注入到另外一个对象中
* 如果该接口有多个实现类, 需要指定对象的名称,如果不指定,会报错
*
* 如果没有指定名称,有多个实现类,根据属性名称在容器中查找
- @Qualifier(“userDaoImpl2”): 可以指定对象在容器中的名称
- 该注解必须结合Autowired进行使用
- @Resource: 自动装配 --可以使用name属性指定对象在容器中的名称
- @Autowired 和@Resource
-
都是自动装配
-
Autowired, 默认按照类型装配,如果类型有多个,则按照名称查找, 由spring提供
-
@Resource:默认是按照名称装配,如果名称没有找到,则按照类型装配, 有Jdk提供
注解总结
a. Bean: 标记在方法上,作用:将方法返回值放到springIOC容器中,可以使用value属性指定对象的名称
该注解适合创建 引用(其他)类对象
与xml映射:
b. Value: 标记在属性上,作用:给简单类型的属性赋值
相当于xml的 value属性
c. 【重点】Component: 标记在类上,作用:创建该类的对象,放到springIOC容器中,可以使用value属性指定对象的名称
该注解适合创建自定义的类对象
子注解:@Service(用于业务层) @Repository(用于持久层), @Controller(用于表现层)的作用与@Component 一样
与xml映射: <bean id="" class="">
d. 【重点】Autowired: 标记在属性和set方法上, 可以没有set方法,作用:自动注入依赖的对象
Qualifier:标记在属性和set方法上, 作用:指定依赖对象的名称
e. Resource: 标记在属性和set方法上, 可以没有set方法,作用:自动注入依赖的对象
可以使用name属性指定依赖对象的名称
f. Autowired 和Resource对比
两个都是自动注入(自动装配)
Autowired:默认按照类型装配,如果类型有多个,按照指定的名称装配, 由spring提供
Resource: 默认按照指定的名称装配,如果没有找到名称,按照类型装配, 由jdk提供
g. @Import: 标记在配置类上,作用引入其他的配置文件(xml)
【重点】
h. @PropertySource :标记在类上,作用引入属性文件(properties)
【重点】xml 映射:<context:property-placeholder location=“classpath:db.properties”></context:property-placeholder>
i. Configuration:标记在类上,作用 代表该类为配置文件
j. ComponentScan:标记在类上,作用 扫描包,创建对象
【重点】<context:component-scan base-package=“com.itheima”></context:component-scan>
l. Scope: 指定对象的范围
m: 与生命周期相同的注解
@PostConstruct:对象初始化执行的方法
@PreDestory:对象销毁时执行的方法