文章目录
1. Spring中的注解
1.1 注解的概念
- 在学习Java基础的时候,对注解有过基本了解,注解主要可以使用在
类
,方法
和属性
上面; - 注解的格式:@注解名称(属性名称=属性值,属性名称=属性值,…);
- 至于在Spring中使用注解,就是为了简化XML的配置;
1.2 Spring中针对Bean管理所提供的注解(用于创建实例)
-
@Component
-
@Service
-
@Controller
-
@Repository
-
Spring中使用注解需要做的准备工作
5.1 最基础的jar包导入
spring-aop-5.2.8.RELEASE.jar
5.2 开启组件的扫描
在配置文件中先使用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"> <!--在这里的base-packge属性中,填写的是你注解的包名 当然,你也可以填写一个范围稍微大一点的包,例如: cn.dxs.service包中用到了注解,需要扫描,cn.dxs.dao中也用到了扫描,这时就可以两个都填,如下: base-package="cn.dxs.service,cn.dxs.dao" 或者可以修改为:base-package="cn.dxs" --> <context:component-scan base-package="cn.dxs.OnCollection"/> </bean
5.3 通过上面的操作基本上就已经创建好了使用注解的基本环境了;然后就可以在指定的包里面使用注解了
5.5 简单的创建一个类,使用一下注解创建对象
/* 如果不写value,那么这个类默认的value就是book; 也就是说如果不写value,那么默认就是当前类首字母小写; */ @Component(value = "thisbook") public class Book { public Book(){ System.out.println("1,2,3"); } }
测试方法:
@Test
public void test1(){
ApplicationContext context = new
ClassPathXmlApplicationContext("/cn/dxs/xml/Bookconfig.xml");
Book book = context.getBean("thisbook", Book.class);
}
运行结果:
2. Spring配置文件中组件的扫描部分内容(了解)
上面的类型是annotation,所以expression属性值为这些注解的都不解释(或者仅仅解释这些标注出来的注解);
如若理解有误,还请指正;
3. Spring基于注解进行属性的注入
@Autowired
:根据属性的类型自动装配;@Qualifier
:根据属性的名称进行注入;
前面两个注解一般是一起使用:如下
//这是属性类
@Component(value = "trisomy")//方便其它注解使用这个名称用来创建该类实例;
public class Trisomy {
public void test(){
System.out.println("这是三体");
}
}
----------------以下是创建对象的类--------------------
/*
如果不写value,那么这个类默认的value就是book;
也就是说如果不写value,那么默认就是当前类首字母小写;
*/
@Component(value = "mbook")
public class MBook {
@Autowired //根据类型进行注入;
@Qualifier(value = "trisomy") //根据名字进行注入,毕竟一个接口可能多个实现,而且也可能有同名的类;
private Trisomy trisomy;//创建一个私有属性
public MBook(){
}
public void TestBook(){
System.out.println("1,2,3");
trisomy.test();
}
}
测试方法:
@Test
public void test1(){
ApplicationContext context = new
ClassPathXmlApplicationContext("/cn/dxs/xml/Bookconfig.xml");
MBook book = context.getBean("mbook", MBook.class);
book.TestBook();
}
测试结果:
@Resource
:可以根据属性类型注入或名称注入;
上面的代码可以通过@Resource(javax.annotation.Resource)进行修改:
@Component(value = "mbook")
public class MBook {
/* @Autowired //根据类型进行注入;
@Qualifier(value = "trisomy") //根据名字进行注入,毕竟一个接口可能多个实现,而且也可能有同名的类;*/
@Resource(name = "trisomy")//既可以用作名称又可以用作类型;不添加name属性的时候就是使用类型;
private Trisomy trisomy;
public MBook() {
}
public void TestBook() {
System.out.println("1,2,3");
trisomy.test();
}
}
输出结果和上面一样;
@Value
:注入普通类型属性;
就是对普通类型,进行注入赋值;
@Value(value = "刘慈欣")
private String athorname;
按照上面的使用方法就可以了;
4. 完全注解(xml配置文件注解化)
在前面的时候,一直使用的是配置文件,但是每次都写单独的配置文件,感觉也很麻烦,尤其是创建组件的扫描都不相同时,就需要创建很多的配置文件,反倒是通过配置类的方式来替代XML配置文件,简单的多;
使用到的注解有:@Configuration
,@ComponentScan
;
然后xml配置文件被注解替代后,在创建对象时,代码就需要进行修改了;
测试类:(修改的也不多,只是换成了加载类的方法)
@Test
public void test3(){
//通过AnnotationConfigApplicationContext加载配置类;
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
Trisomy trisomy = context.getBean("trisomy", Trisomy.class);
trisomy.test();
}