Spring-注解开发

野性酷女 2022-11-25 10:14 291阅读 0赞

通过注解完成java对象创建,属性赋值

使用的步骤:

  1. 1.** 加入maven依赖**

2. 在类中加入Spring的注解

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <maven.compiler.source>1.8</maven.compiler.source>
  4. <maven.compiler.target>1.8</maven.compiler.target>
  5. </properties>
  6. <dependencies>
  7. <!-- 单元测试依赖 -->
  8. <dependency>
  9. <groupId>junit</groupId>
  10. <artifactId>junit</artifactId>
  11. <version>4.11</version>
  12. <scope>test</scope>
  13. </dependency>
  14. <!-- spring依赖 -->
  15. <dependency>
  16. <groupId>org.springframework</groupId>
  17. <artifactId>spring-context</artifactId>
  18. <version>5.0.3.RELEASE</version>
  19. </dependency>
  20. </dependencies>

3. 在spring.xml的配置文件中,加入一个组件扫描的标签,说明注解在项目的位置

声明组件扫描器 (component-scan)

  1. **组件就是Java对象**
  2. **base-package** :指定**注解在项目中的包名**
  3. **component-scan : **spring会扫描遍历base-package指定的包,把**包中和子包所有的类,找到类中的注解**,**按照注解的功能创建对象或给属性赋值**

@Component:

创建对象的,等同于的功能

  1. **1. 属性:value 就是对象的名称,也就是<bean>的id值**
  2. @Component("xxx")或者@Component(value="xxx")

2. 位置:在类的上面

代码演示

student类

  1. @Component("myStudent")
  2. public class student {
  3. @Value("李四")
  4. private String name;
  5. @Value("21")
  6. private int age;
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public void setAge(int age) {
  11. this.age = age;
  12. }
  13. @Override
  14. public String toString() {
  15. return "student{" +
  16. "name='" + name + '\'' +
  17. ", age=" + age +
  18. '}';
  19. }
  20. }

ApplicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd">
  9. <context:component-scan base-package="cn.com.Ycy.spring.ba01"/>
  10. </beans>

测试类

  1. @Test
  2. public void test01(){
  3. String config="ApplicationContext.xml";
  4. ApplicationContext ac = new ClassPathXmlApplicationContext(config);
  5. student student = (cn.com.Ycy.spring.ba01.student) ac.getBean("myStudent");
  6. System.out.println(student);
  7. }

赋值

1、简单类型的属性赋值

  1. **@value**
  2. 1. 在属性定义的上面,**无需set方法,推荐使用**
  3. 2. set方法上面
  4. **示例代码:**
  5. @Value("李四")
  6. public void setName(String name) {
  7. this.name = name;
  8. }

2、引用类型的属性赋值 @Autowired @Qualifier

  1. 1)(**byType的自动注入**) @Autowired 默认**按类型自动装配Bean**,可以加在属性上,也可以加在setter方法上
  2. 2)(**byName 自动注入** @Autowire + Qualifier("xxx") 按照属性名 匹配,如果没有匹配到就会报错,因为**Autowire()默认是 required="true"**,如果**设置为false**,没有匹配到就只是把属性赋值为null,不会出错.
  3. 3@Resource 默认是按照类名小写匹配,没有匹配到直接按照类型匹配,is a

关系,类似于autowire=”byType”.

  1. 4) @Resource(name="xxxx") 就是按照名字匹配,没匹配到就报错,**类似autowire="byName"**.

衍生注解

为了更好的进行分层,Spring可以使用其他三个注解,功能和@Component一样

1、@Conteoller:web层,**用在控制面板上面**

2、@Service:service层,**用在业务层类的上面**

3、@Repository:dao层,**用于持久层类的上面**

以上三个注解的使用语法和Component一样,都能够创建对象,但是这三个注解还有额外的功能
@Repository、@Service、@Controler是给项目的对象分层的

总结一些小细节:

1、 Component的value是可以省略的,不写名称是默认:类名首字母小写,值要唯一

2、配置扫描多个包,可以使用逗号分开,分号也可以

  1. 第一种:
  2. <context:component-scan base-package="cn.com.Ycy.spring.ba02"/>
  3. <context:component-scan base-package="cn.com.Ycy.spring.ba03"/>
  4. 第二种:逗号分开,
  5. <context:component-scan base-package="cn.com.Ycy.spring.ba02,cn.com.Ycy.spring.ba03"/>
  6. 第三种:分号分开;
  7. <context:component-scan base-package="cn.com.Ycy.spring.ba02;cn.com.Ycy.spring.ba03"/>

3、XML与注解比较

  1. 1. XML可以适用任何场景 ,结构清晰,维护方便
  2. 2. 注解不是自己提供的类使用不了,开发简单方便

4、xml与注解整合开发 :推荐最佳实践

  1. 1. xml管理Bean
  2. 2. 注解完成属性注入

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring 注解开发

    一、spring的xml配置开发与注解开发的对应关系 自从2.5版本开始,Spring就支持了注解开发。一直到3.0支持纯注解开发。那么注解开发与原来的配置开发有什么关系

    相关 spring 注解开发

    spring 注解开发 注解:为了代替配置文件,让配置信息和java代码看起来更直观 (注,JDK1.8和spring4.0以上才兼容) 也起解释说明和检查的作用,