环境准备
在resources文件夹中创建一个配置文件applicationContext.xml
<?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="bean"></context:component-scan>
</beans>
常用IOC注解按照作用分类
1.用于创建对象的
他们的作用就和在xml配置文件中编写一个<bean>
标签实现的功能是一样的。
1.@Component
作用:用于把当前类对象存入spring容器中;
属性 value
:用于指定bean的id。当我们不写时,他的默认值时当前类名,且首字母小写。
2.@Controller
(表现层)、@Service
(业务层)、@Repository
(持久层)
以上三个注解他们的作用和属性与@Component
是一模一样;
他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰。
2.用于在注入数据的
他们的作用就和在xml配置文件中的<bean>
标签中写一个<property>
标签的作用是一样的。
1.@Autowired
作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功;
如果ioc容器中没有任何bean类型和要注入的变量类型匹配,则报错;
如果ioc容器中有多个类型匹配时,则在map表中先根据类型找到多个key(他们的value相同),再根据要注入的那个类型的变量名称查找所注解的那个qqq➡(@Component("qqq")
)
出现位置:可以是变量上,可以是方法上。
2.@Qualifier
作用:在按照类中注入的基础之上再按照名称注入。他在给类成员注入时不能单独使用(要和@Autowired
一起使用)。但是给方法参数注入时可以。
属性:value
:用于指定注入bean的id。
3.@Resource
作用:直接按照bean的id注入,它可以独立使用。
属性:name
用于指定bean的id。
以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
另外,集合类型的注入只能通过xml来实现。
4.@Value()
作用:用于注入基本类型和String类型的数据;
属性:value
用于指定数据的值,它可以使用spring中SpEl(也就是spring中的el表达式)。
3.用于改变作用范围的
他们的作用就和再<bean>
标签中使用scope
属性实现的功能是一样的。
@Scope
作用:用于指定bean的作用范围;
属性value
:指定范围的取值。常用取值:单例:singleton
和多例:prototype
.
不写的时候默认为单例。
4.和生命周期相关
他们的作用就和在<bean>
标签中使用init-method
和destory-method
的作用是一样的。
@PostConstruct
作用:用于指定初始化方法。
@PreDestroy
作用:用于指定销毁方法。
5.用注解代替xml
1.@Configuration
作用:指定当前类是一个配置类(此类作用:和applicationContext.xml的作用时一样的)
2.@ComponentScan
作用:用于通过注解指定spring在创建容器时要扫描的包
属性(value):它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。
3.@Bean
作用:用于把当前方法的返回值作为bean对象存入spring的Ioc容器中。
属性name
:用于指定bean的id。当不写时,默认时当前方法的名称。
细节:当我们使用注解配置方法时,如果有方法参数,spring框架会去容器查找有没有可用的bean对象。 查找的方式和Autowired注解的作用是一样的。
4.@import
- 作用:用于导入其他的配置类。
- 当我们使用Import的注解之后,有Import注解的类是父配置类,而导入的都是子配置类
- 属性
value
:用于指定其他配置类字节码。
5.PropertySource
- 作用:用于指定properties文件的位置
- 属性
value
:指定文件的名称和路径。 - 关键字:
classpath
,表示类路径下