1 2 3 4 5
| <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.19</version> </dependency>
|
加入此注解,也会间接加入spring-aop依赖
注解-创建对象
@component
用于创建对象,等同于bean功能,value是bean的id值,value值是唯一的,创建的对象在spring容器中就一个
创建对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| package com.zss.pojo;
import org.springframework.stereotype.Component;
@Component(value = "myStudent") public class Student { String name; Integer age; School school;
public Student(String name, Integer age) { this.name = name; this.age = age; }
public Student() { }
public void setName(String name) { this.name = name; }
public void setAge(Integer age) { this.age = age; }
public void setSchool(School school) { this.school = school; }
@Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", school=" + school + '}'; } }
|
扫描组件
1 2 3 4 5 6 7 8 9
| <?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.zss.pojo"/> </beans>
|
测试
1 2 3 4 5 6 7 8
| @Test public void test01() { String config = "applicationContext.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config); Student student = (Student) applicationContext.getBean("myStudent"); System.out.println(student); }
|
其他
- @Repository(用在持久层上面):放在dao的实现类上面,表示创建dao对象,dao对象访问数据库
- @Service(用在业务层上面,放在service实现类上面),创建service对象,service对象是做业务处理,可以有事务等功能
- @Controller,用在控制器上面,创建控制器对象,接受用户的参数,显示请求的处理结果
以上的三个和@Component一样的,都能创建对象,但是还有额外的功能
注解-赋值
@Value简单类型赋值
在属性定义上,不需要set方法,当然也可以放到set方法上进行赋值
1 2 3 4
| @Value("张三") String name; @Value("15") Integer age;
|
引用数据类型赋值
@Autowired
自动注入,默认使用bytype注入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.zss.pojo;
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;
@Component("myschool") public class School { @Value("北京大学") String name; @Value("北京") String address;
public void setName(String name) { this.name = name; }
public void setAddress(String address) { this.address = address; }
@Override public String toString() { return "School{" + "name='" + name + '\'' + ", address='" + address + '\'' + '}'; } }
|
1 2 3 4 5 6
| @Value("张三") String name; @Value("15") Integer age; @Autowired School school;
|
我们也可以设置为ByName的方式,需要加入@Qualifier进行指定@Qualifier(value=“bean的id”)
1 2 3
| @Autowired @Qualifier("myschool") School school;
|
@Autowired拥有一个required的属性,默认为true,表示如果是没有这个属性值,则控制台报告错误,如果我们更改成为false,则表示如果没有这个值,则不会给该值赋值
@Resource
1 2 3 4 5
| <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>
|
这个注解来源于jdk,并不是来源于spring,默认byname,首先会使用byname,如果不符合,自动使用bytype方式
1 2
| @Resource School school;
|
如果我们一定要使用byname类型
1 2
| @Resource(name = "myschool") School school;
|
总结
xml文件和注解的方式,xml文件可以与源代码类独立分开,更改时比较简单,而注解的方法比较适合不经常更改的方式。