Spring【使用注解开发、配置类】

简介: Spring【使用注解开发、配置类】

使用注解开发

环境准备

使用注解需要导入 context 约束,增加注解支持!

标准的配置文件是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="com.study.pojo"/>
    <context:annotation-config/>
</beans>

1、Bean

//等价于 <bean id="user" class="com.study.pojo.User"/>
//@Component 组件
@Component  //说明User类被管理了
public class User {
//...
}

2、属性如何注入

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//等价于 <bean id="user" class="com.study.pojo.User"/>
//@Component 组件
@Component  //说明User类被管理了
public class User {
    //相当于 <property name="name" value="李元芳"/>
    @Value("李元芳")
    public String name;
    //两种方法都一样 优先调用这种
    @Value("李元芳")
    public void setName(String name) {
        this.name = name;
    }
}

3、衍生的注解

@Component有多个衍生注解:我们在web开发中,会按照mvc三层架构分层!

  • dao【@Respository】
  • service【@Service】
  • controller【@Controller】

多个包的话,需要在我们的配置文件中指定上层包名:

<?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.study"/>
    <context:annotation-config/>
</beans>

4、自动装配置

上一节已经写过了

  • @Autowried
  • @Qualifier(搭配@Autowried使用)
  • @Resource

5、作用域

@Component  
@Scope("singleton")    //标注为单例模式
public class User {
//...
}


6、小结

xml 与 注解:

  • xml适用于任何场合,维护简单方便
  • 注解不能引用别的类(Bean),维护相对复杂!

xml 与 注解的最佳实现:

  • xml用来管理Bean


  • 注解只负责属性的注入

完全使用Java的方式配置Spring

使用一个Java配置类可以实现完全不依赖配置文件 applicationContext.xml 。

JavaConfig 是Spring的一个子项目,在Sring4之后成为了核心功能。

实体类

package com.study.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//这个注解的意思是 这个类被Spring接管了 注册到了容器中
@Component
public class User {
    private String name;
    public String getName() {
        return name;
    }
    @Value("李元芳")   //注入名字
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

配置类

package com.study.config;
import com.study.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
//这个也会被注册到Spring容器中 因为它本身也是一个Component
//@Configuration 是一个配置类 相当于一个 beans.xml
@Configuration
@ComponentScan("com.study.pojo")
@Import(MyConfig.class) //导入另一个配置类
public class MyConfig {
    /**
     *  注册一个bean,相当于
     *     <bean id="fetUser" class="com.study.pojo.User"/>
     */
    @Bean
    public User getUser(){
        return new User();
    }
}
package com.study.config;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig2 {
}

测试类

import com.study.config.MyConfig;
import com.study.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
    public static void main(String[] args) {
        //如果完全使用了配置类的方式,我们就只能通过 AnnotationConfig 上下文来获取容器,通过配置类的 class 来加载
        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
        User getUser = (User) context.getBean("getUser");   //对应方法名
        System.out.println(getUser.getName());
    }
}

这种纯Java的配置方式在SpringBoot中随处可见!

IOC: 将对象的创建和依赖关系管理的责任从应用程序代码中转移到框架或容器中。

相关文章
|
10天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
28 0
|
6天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
24 0
|
17天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
41 4
SpringBoot必须掌握的常用注解!
|
7天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
18 2
|
16天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
27 1
|
18天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
58 2
|
18天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
34 1
|
12天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
25 0
|
13天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
6月前
|
Java API Spring
Spring容器如何使用一个注解来指定一个类型为配置类型
Spring容器如何使用一个注解来指定一个类型为配置类型
52 0