一、注解是什么?
从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
1.1创建bean的注解
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository
- 上面四个注解功能是一样的,都可以用来创建 bean 实例
1.2注入属性的注解
(1)@Autowired:根据属性类型进行自动装配
(2)@Qualifier:根据名称进行注入
(3)@Resource:可以根据类型注入,可以根据名称注入
(4)@Value:注入普通类型属性
1.3配置类注解
(1)@Configuration //作为配置类,替代 xml 配置文件
(2)@ComponentScan
二、注解的使用
1.使用注解创建bean对象
在学习注解之前,都是通过对xml配置文档进行配置这种方法来创建bean的
这种方法特别繁琐,比较浪费时间。现在通过使用注释我们可以很方便的进行
bean的创建。
1.1导入需要用到的jar包
相对于前面,使用注解需要用到新的jar包
1.2在xml文档中引入相应的命名空间
这点和在类中import其他类很相似,只有引入相应的命名空间才能够使用相应的标签。
<!--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"
1.3进行扫描配置
需要使用相应的标签进行配置,让spring知道是在哪里使用了注解。
<!--
先引入命名空间context
然后使用context标签
扫面多个包的:
1路径中使用,隔开每个类都需要全路径
2.直接扫面上层,填写包名
在注解里面 value 属性值可以省略不写,
默认值是类名称,首字母小写
UserService 类的id值就为 userServic
-->
<context:component-scan base-package="注解"></context:component-scan>
1.4组件扫描的细节配置
<!--
组件扫描管理
1.use-default-filters="false" 表示现在不使用默认 filter,自己配置 filter
context:include-filter ,设置扫描哪些内容
type表示根据注解来扫描
expression表示的是注解的类型,也就是扫描的时候之后扫描带@Controller注解的类
-->
<context:component-scan base-package="注解" use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--示例 2
下面配置扫描包所有内容
context:exclude-filter: 设置哪些内容不进行扫描
-->
<context:component-scan base-package="注解">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
1.5使用注解
package 注解;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class course {
@Autowired
public Student st;
@Resource//javax中的
public Student st1;
public void add(){
System.out.println("======course======");
st.add();
}
2.使用注解进行属性注入
通过对相应注解的使用可以进行属性的注入。
//@Autowired注解的使用
//@Autowired注解的使用
//这个注解是根据属性的类型进行属性注入的
@Autowired
public Student st;
@Qualifier注解的使用
@Qualifier
private course cs;
@Value注解的使用
// @Value注解的使用
//value注解是对普通类型进行属性注入的
private course cs;
@Value(value="张三")
private String name;
@Value(value = "10086")
private int age;
对于抽象类的注解,或者有多个实现类的接口的注解,需要使用@Autowired注解和@Qualifier注解配合使用,防止单独使用的时候spring找不到类
全注解开发
(1)创建配置类,替代 xml 配置文件
(1)创建配置类,替代 xml 配置文件
@Configuration //作为配置类,替代 xml 配置文件
@ComponentScan(basePackages = {"com.atguigu"})
public class SpringConfig {
}
(2)编写测试类
public void testService2() {
//加载配置类
ApplicationContext context
= new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = context.getBean("userService",
UserService.class);
System.out.println(userService);
userService.add();
}
总结
IOC,控制反转,是spring的重要特性之一
将就是原本需要人手动去创建的对象交给ioc容器完成
IOC 底层原理
xml 解析、工厂模式、反射
通过xml的配置我们可以完成由spring自动创建对象和对 对象进行属性注入的工作,由使用xml配置文档的bean标签进行创建对象,到使用注释去创建对象,将原本繁琐的工作一步步进行了简化。