Spring-IOC容器中的常用注解与使用方法

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Spring-IOC容器中的常用注解与使用方法

Spring是什么?

Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。


体系结构

image.png


核心容器(Core Container):Spring的核心容器是其他模块建立的基础,有Spring-core、Spring-beans、Spring-context、Spring-context-support和Spring-expression(String表达式语言)等模块组成


数据访问/集成(Data Access)层:数据访问/集成层由JDBC、ORM、OXM、JMS和事务模块组成。


Web层:Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成。


AOP(Aspect Oriented Programming)模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。


植入(Instrumentation)模块:提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用。


消息传输(Messaging):Spring4.0以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。


测试(Test)模块:Spring-test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。


引入Jar包

<dependencies>
        <!--spring的jar包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.11.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.11.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.11.RELEASE</version>
        </dependency>       
</dependencies>

导入约束

<?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">
       <!--spring的约束 -->
    <!--把对象的创建交给Spring来管理 -->
    <!--获取容器中对象时使用id-->
   <!-- <bean id="accountServiceImpl" class="com.dynamic2.service.Impl.AccountServiceImpl"></bean>
    <bean id="accountDaoImpl" class="com.dynamic2.dao.Impl.AccountDaoImpl"></bean>-->
    <context:component-scan base-package="com.dynamic2"></context:component-scan>
</beans>

常见注解

用于创建对象

@Component:把资源让spring来管理。相当于xml中配置一个bean。value:指定bean的id,如果不指定value属性,默认bean的id是当前类的类名。首字母小写


@Controller:与@Component功能一样,一般用在表现层,便于分层


@Service:与@Component功能一样,一般用在业务层,便于分层


@Repository:与@Component功能一样,一般用于持久层,便于分层


/**
 * @Author: Promsing
 * @Date: 2021/3/19 - 11:34
 * @Description: 用于创建对象
 * @version: 1.0
 *  XML配置 <bean id="accountServiceImpl" class="com.dynamic2.service.Impl.AccountServiceImpl"></bean>
 */
@Repository("accountDao ")
public class AccountDaoImpl implements IAccountDao {
            ......
}
@Service("accountService")
public class AccountServiceImpl implements IAccountService {
            ......
}
@Component("accountServiceImpl")
@Scope("prototype")//多例
public class AccountServiceImpl2 implements IAccountService {
             ......
}

用于注入数据

@Autowired:自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时。使用要注入的对象变量名称作为bean的id,在spring容器中查找,找到了注入成功,找不到就报错。


@Qualifier:在自动按照类型注入的基础上,再按照Bean的id注入。它在给字段注入时不能单独使用,必须和@Autowire一起使用;但是给方法参数注入时,可以单独使用。value属性是指定Bean的id


@Resource:直接按照Bean的id注入。它也只能注入其他Bean类型。name属性是指定Bean的id


@Value:注入基本数据类型和String类型数据


/**
 * @Author: Promsing
 * @Date: 2021/3/19 - 11:34
 * @Description: 用于创建对象
 * @version: 1.0
 *  XML配置 <bean id="accountServiceImpl" class="com.dynamic2.service.Impl.AccountServiceImpl"></bean>
 */
@Component("accountServiceImpl")
@Scope("prototype")//多例
public class AccountServiceImpl implements IAccountService {
    //注入成员变量
   /* @Autowired  自动按照类型注入--寻找类型
    @Qualifier("accountDao2")*/ //寻找id
    //以上两个注解相加的作用等于这个
    @Resource(name = "accountDao2")
    private IAccountDao accountDao2;
    @Override
    public void saveAccount() {
        accountDao2.saveAccount();
        //System.out.println("service中的saveAccount执行了~~");
    }
}

用于改变作用范围

@Scope:指定Bean的作用范围。value属性指定范围的值--singleton单例,prototype多例,request作用与web应用的请求范围,session作用与web应用的会话范围,global-session作用与集群环境中会话范围


@Component("accountServiceImpl")
@Scope("prototype")//多例
public class AccountServiceImpl implements IAccountService {
    ......    
}

和生命周期相关(了解)

@PostConstruct:用于指定初始化方法


@PreDestroy:用于指定销毁方法


Spring5

@Configuration:用于指定当前类是一个spring配置类,当有容器时会从该类上加载注解。获取容器是使用AnnotationApplicationContext(有@Configuration注解的类.class)


@ComponentScan:用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件找那个的<context : component-sacn base-package="com.dynamic"/>


@Bean:该注解只用用在方法上,表明使用此方法创建一个对象,并且放入spring容器中


@Import:用于导入其他配置类,解耦合


/**
 * @Author: Promsing
 * @Date: 2021/3/28 - 0:36
 * @Description: Spring配置类
 * @version: 1.0
 */
@Configuration//指定当前类是一个配置类
@ComponentScan("com.dynamic_transaction_anno")//用于指定spring在初始化容器时需要扫描的包
@Import({JdbcConfig.class,TransactionConfig.class})//导入其他配置类
@EnableTransactionManagement//开启spring注解事务的支持
public class SpringConfig {
    @Bean("jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource ds){
        return new JdbcTemplate(ds);
    }
    @Bean("dataSource")
    public DataSource createDataSource(){
        DriverManagerDataSource dr=new DriverManagerDataSource();
        dr.setDriverClassName("com.mysql.jdbc.Driver");//com.mysql.jdbc.Driver
        dr.setUrl("jdbc:mysql//localhost:330b/eesy");
        dr.setUsername("root");
        dr.setPassword("root");
        return dr;
    }
}

Spring整合Junit

@RunWith:替代原有的运行器


@ContextConfiguration:指定配置文件的位置


@RunWith(SpringJUnit4ClassRunner.class)//替代原有运行器
@ContextConfiguration(classes=SpringConfiguration.class)//指定配置类
public class AccountServiceTest {
    @Test
    public void testFindAll(){
       //执行测试方法
    }
}

从IOC容器中获取对象

/**
 * @Author: Promsing
 * @Date: 2021/3/21 - 11:22
 * @Description: 单元测试
 * @version: 1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=SpringConfiguration.class)
public class AccountServiceTest {
      @Resource(name = "accountServiceImpl")
      private IAccountService accountService;
    @Test
    //从容器中获取对象
    public void test(){
        //一、获取容器
        //使用配置文件加载
        ApplicationContext ac=new ClassPathXmlApplicationContext("bean3_1.xml");
        //使用配置类加载
      ///  ApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfiguration.class);
        //二、获取对象
         accountService=(IAccountService)ac.getBean("accountServiceImpl",IAccountService.class);
        //三、执行方法
        List<Account> allAccounts = accountService.findAllAccount();
        for (Account allAccount : allAccounts) {
            System.out.println(allAccount);
        }
    }
}
相关文章
|
29天前
|
开发者 Docker 容器
获取Docker基础使用方法:让容器化变得轻松。
对于Docker的初学者来说,了解这些基础知识点就足够了。实践是最好的老师,越是动手操作,对Docker的理解会越深。祝阅读这篇文章的开发者们一切顺利,愿你在Docker的海洋中航行顺利!
83 17
|
1月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
3月前
|
JSON 前端开发 Java
Spring MVC常用的注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中 的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 @Controller:控制器的注解,表示是表现层,不能用用别的注解代替 @RestController : 组合注解 @Conntroller + @ResponseBody @GetMapping , @PostMapping , @Put
|
3月前
|
Java Spring
Spring Boot的核心注解是哪个?他由哪几个注解组成的?
Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 : ● @SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能; ● @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项 ● @ComponentScan:Spring组件扫描
|
3月前
|
Java 容器 Spring
什么是Spring IOC 和DI ?
IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转 移,从程序代码本身转移到了外部容器。 DI : 依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。
|
3月前
|
Java 测试技术 Spring
SpringBoot+@Async注解一起用,速度提升
本文介绍了异步调用在高并发Web应用性能优化中的重要性,对比了同步与异步调用的区别。同步调用按顺序执行,每一步需等待上一步完成;而异步调用无需等待,可提升效率。通过Spring Boot示例,使用@Async注解实现异步任务,并借助Future对象处理异步回调,有效减少程序运行时间。
104 3
|
2月前
|
人工智能 缓存 自然语言处理
保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
这是一份详尽的 Spring AI 注解式开发教程,涵盖从环境配置到高级功能的全流程。Spring AI 是 Spring 框架中的一个模块,支持 NLP、CV 等 AI 任务。通过注解(如自定义 `@AiPrompt`)与 AOP 切面技术,简化了 AI 服务集成,实现业务逻辑与 AI 基础设施解耦。教程包含创建项目、配置文件、流式响应处理、缓存优化及多任务并行执行等内容,助你快速构建高效、可维护的 AI 应用。
|
3月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
75 0
|
4月前
|
XML Java 数据格式
Spring容器的本质
本文主要讨论Spring容器最核心的机制,用最少的代码讲清楚Spring容器的本质。
|
3月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
110 0