Spring基于注解的IOC配置
基于注解的IOC配置
曾经XML的配置
<bean id="accountService" class="com.zjw.service.impl.AccountServiceImpl"
scope="" init-method="" destroy-method="">
<property name="" value="" | ref=""></property>
</bean>
注解分为用于创建对象,用于注入数据,和改变作用范围
1、用于创建对象的注解
他们的作用就和在xml配置文件中的标签实现的功能是一样的
@Component:
作用:用于把当前类对象存入spring容器中
属性:
- value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母小写。
@Controller :一般用在表现层
@Service :一般用在业务层
@Repository :一般用在持久层
以上三个注解他们的作用和属性与Component是一模一样
他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰
2、用于注入数据的
他们的作用就和在xml配置文件中的bean标签中写一个property标签的作用是一样的
@Autowired:
作用:自动按照类型注入。只要容器中有唯一的bean对象类型和要注入的变量类型匹配,就可以注入成功.
- 如果ICO容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
- 如果有两个以上类型,按照变量名称注入。
- 如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false
出现位置:
- 可以是变量上,也可以是方法上
细节:
在使用注解注入时,set方法就不是必须的。
说明:spring 4.0开始就不推荐使用属性注入,改为推荐构造器注入和setter注入
https://zhuanlan.zhihu.com/p/92395282
https://www.cnblogs.com/lvdeyinBlog/p/15178226.html
@Qualifier
作用:在按照类型注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用,配合@Autowired使用。但是在给方法参数注入可以单独使用
属性:
value:用于指定注入bean的id
@Resource
作用:直接按照bean的id注入。它可以单独使用
如果没有指定name属性,当注解写在字段上时,默认取属性名进行按照名称查找,如果按照属性名称没有找到则按照属性类型查找。
如果指定name,就只会按照名称进行装配。
如果注解写在setter方法上默认取属性名进行装配。
属性:
name:用于指定bean的id
以上三个注入都是只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
另外,集合类型的注入只能通过XML来实现。
@Value
作用:用于注入基本类型和String类型的数据
属性:
value:用于指定数据的值。它可以使用spring中SpEL(也就是Spring的el表达式)
SpEL的写法:$
3、用于改变作用范围的
他们的作用就和在bean标签中使用scope属性实现的功能是一样的
@Scope
作用:用于指定bean的作用范围
属性:
value:指定范围的取值。常用取值:singleton、prototype,默认singleton
和生命周期相关
他们的作用就和在bean标签中使用init-method和destroy-method的作用是一样的
@PreDestroy
作用:用于指定销毁方法
@PostConstruct
作用:用于指定初始化方法
示例
package com.zjw.service.impl;
import com.zjw.dao.IAccountDao;
import com.zjw.service.IAccountService;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* 账户的业务层实现类
*/
@Component("accountService")
@Scope(value = "singleton") //默认也是单例
public class AccountServiceImpl implements IAccountService {
// @Autowired
// private IAccountDao accountDao ;
//通过构造器注入
// private final IAccountDao accountDao ;
// @Autowired
// @Qualifier("accountDao1")
// private IAccountDao accountDao ;
@Resource
// @Resource(name = "accountDao1")
private IAccountDao accountDao ;
@Value("张三")
private String name ;
@Override
public void saveAccount() {
accountDao.saveAccount();
}
@PostConstruct
public void init(){
System.out.println("AccountServiceImpl……init方法执行了");
}
@PreDestroy
public void destroy(){
System.out.println("AccountServiceImpl……destroy方法执行了");
}
public AccountServiceImpl() {
System.out.println("AccountServiceImpl构造方法。。。。");
// this.accountDao = accountDao;
}
// @Autowired //此注解可以省略
// public AccountServiceImpl(IAccountDao accountDao) {
// System.out.println("AccountServiceImpl构造方法。。。。");
// this.accountDao = accountDao;
// }
}
Spring基于注解的IOC配置的更多相关文章
- Spring 基于注解的 IOC 配置
创建 spring 的 的 xml 配置 文件 <context:component-scan base-package="com.itheim"/> 指定创建容器时要 ...
- 10 Spring框架--基于注解的IOC配置
1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...
- spring基于注解的IoC以及IoC的案例
1.Spring中IoC的常用注解 1.1明确: (1)基于注解的配置和xml的配置要实现的功能都是一样的,都是要降低程序之间的耦合,只是配置的形式不一样 2.案例:使用xml方式和注解方式实现单表的 ...
- 阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
复制依赖和改jar包方式 src下的都复制过来. 复制到新项目里了 bean.xml里面复制上面一行代码到下面.把aop改成context. 配置spring容器创建时要扫描的包 Service的配置 ...
- 基于注解的IOC配置
1 明确 注解配置和XML配置要实现的功能都是一样的,都是要降低程序间的耦合.只是配置的形式不一样. 关于实际的开发中到底是使用XML还是注解,每家公司有着不同的习惯.具体问题具体分析. 2 环境搭建 ...
- spring的基于注解的IOC配置
1.配置文件配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http: ...
- spring基于注解的IOC
曾经的XML配置: <bean id="accountService" class="com.itheima.service.impl.AccountService ...
- 缓存初解(五)---SpringMVC基于注解的缓存配置--web应用实例
之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spring基于注解的缓存配置--EHCache AND OSCache 现在介绍一下 ...
- 缓存初解(三)---Spring3.0基于注解的缓存配置+Ehcache和OScache
本文将构建一个普通工程来说明spring注解缓存的使用方式,关于如何在web应用中使用注解缓存,请参见: Spring基于注解的缓存配置--web应用实例 一.简介 在spring的modules包中 ...
- 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...
随机推荐
- 用python做时间序列预测三:时间序列分解
在初始概念篇中,我们简单提到了时间序列由趋势.周期性.季节性.误差构成,本文将介绍如何将时间序列的这些成分分解出来.分解的使用场景有很多,比如当我们需要计算该时间序列是否具有季节性,或者我们要去除该时 ...
- Aspire+扣子智能体实现AI自动CodeReview
一.引言 Code Review在软件开发中扮演着至关重要的角色,它不仅能够提升代码质量,确保代码的可维护性和一致性,还能促进团队成员之间的知识共享和技术提升. 传统的代码审查过程面临着诸多挑战和局限 ...
- 借Processing语言及IDE做DOS批处理的事务( 批量修改文件夹或文件的名字 )
一直想用Processing语言做一些批处理的事务,因为其自带的IDE功能紧凑易用,极度轻量,又加上Java语言的生态极具友好,处理一些windows相关操作完全可行,简单快捷. 这次就是用它做[批量 ...
- c++经典卡常
1.展开函数 如下代码: void lowbit(int x) { return x&(-x); } signed main() { cout << lowbit(12345); ...
- .NET MCP项目对比分析:MCPSharp、mcpdotnet与ModelContextProtocol.NET
MCP(Model Context Protocol)协议是一种由Anthropic推出的开放协议,旨在实现大型语言模型(LLM)与外部数据源和工具之间的无缝集成.简要对比分析三个.NET的MCP项目 ...
- 探秘Transformer系列之(11)--- 掩码
探秘Transformer系列之(11)--- 掩码 目录 探秘Transformer系列之(11)--- 掩码 0x00 概述 0x01 需求 1.1 避免偏差 实际情况 问题所在 解决方案 1.2 ...
- 带大家做了个 AI 项目,没想到这么简单!
大家好,我是程序员鱼皮,现在已经是全民 AI 时代了,咱们程序员更要想办法榨干 AI,把 AI 利用起来.前几天我一时兴起,直播用 2 多个小时的时间,从需求分析开始,带大家做了一个 AI 海龟汤游戏 ...
- php不使用mysqlDump工具实现的mysql数据备份
再无法使用mysqlDump等外部工具的时候,我们需要到处数据库备份的话,借助phpMyAdmin强大的功能就可以实现.如果我们想自己实现一个类似phpMysql的功能要如何去考虑了,因此,在这里我给 ...
- 使用C#创建一个MCP客户端
前言 网上使用Python创建一个MCP客户端的教程已经有很多了,而使用C#创建一个MCP客户端的教程还很少. 为什么要创建一个MCP客户端呢? 创建了一个MCP客户端之后,你就可以使用别人写好的一些 ...
- 办公自动化-批量更新tar包内文件
最近工作有点忙,学习的时间也少了,为了提高工作效率,有时候我们需要自己写一些提高办公处理效率给的工具或者脚本或者程序. 比如,我目前遇到的一个事项,需要更新很多个tar包文件,把tar包内的某个文件替 ...