Spring注解开发

news/2024/10/15 2:28:26

配置bean

在类的上方一个注解: @Component ,就表示配置了该类

@Component("该类的名称,可以省略不写")
public class DaoImpl implements Dao {public void show(){}
}

在xml配置文件中,添加扫描注解的配置

# base-package表示要扫描的包
<context:component-scan base-package="com.fyislo"/>
  • Spring提供了@Component注解的三个衍生注解
    • @Controller:用于表现层的bean定义
    • @Service:用于业务层bean定义
    • @Repository:用于数据层bean定义

纯注解开发

  • Spring3.0开启了纯注解开发模式,使用Java类替代了配置文件,开启了Spring快速快发赛道。
  • Java类代替Spring核心配置文件

给类加上一个 @Configuration 表示这是一个配置类

@Configuration//表示这是一个配置类  
@ComponentScan("com.dao")   //配置扫描注解,指定要扫描的包
public class SpringConfig {}# 加载配置类初始化容器
ApplicationContext ctx = new 	AnnotationConfigApplicationContext(配置类的字节码文件);# 加载配置文件初始化容器
ApplicationContext ctx2 = new ClassPathXmlApplicationContext("配置文件");
  • @Configuration 注解用于设定当前类为配置类
  • @ComponentScan 注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式: @ComponentScan({"com.dao","com.service"})

bean管理

在类加上 @Scope("prototype") 注解,即可更换为非单例模式

  • scoper
    • singleton:单例(默认)
    • prototype:非单例

在类的方法上加上 @PostConstruct@PreDestroy 注解,即可控制bean的生命周期

@Component("bookDao")  
@Scope("prototype")//指定该类为非单例模式
public class BookDaoImpl implements BookDao {@PostConstruct//构造方法后运行public void init(){}@PreDestroy//销毁前运行public void destroy(){}
}

依赖注入

引用类型注入

使用 @Autowired 注解,便可以自动注入属性。按类型注入。

在自动装配的情况下,使用 @Qualifier("指定的名称") ,可以指定它加载对应的变量名称。

@Service  
public class BookServiecImpl implements BookService {  @Autowired  @Qualifier("bookDao")  private BookDao bookDao;  
}
  • 注意: @Qualifier 注意配合 @Autowired 运行
  • 注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
  • 注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法

简单类型的注入

在属性上加 @Value("数据") 注解,即可完成简单类型的注入

@Value("zhangsan123")
private String name;

在配置类加载properties的配置文件

@Configuration//表示这是一个配置类  
@ComponentScan("com.fyislo")//配置扫描注解  
@PropertySource("jdbc.properties")//加载properties的配置文件  
public class SpringConfig {}# 此时@Value就可以使用${}引用properties的配置文件中的数据了
@Value("${name}")
prviate String name;

注意: @PropertySource() 不支持使用通配符*

第三方bean管理

在配置类中定义一个方法,获得要管理的对象,在此方法上加上 @Bean 注解即可。

1、可以使用一个专门管理bean的配置类,只需要的另一个配置类中用 @Impoet 注解导入另一个配置类即可。(推荐)

@Configuration//表示这是一个配置类
@Import({JdbcConfig.class})//导入另一个配置类
public class SpringConfig {}@Configuration//表示这是一个配置类  
public class JdbcConfig {  @Beanpublic DataSource dataSource() {  DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("");ds.setUr1("");ds.setUsername("");ds.setPassword("");//......其它配置return ds; }  
}

2、也可以使用 @ComponentScan 注解将独立的配置类加入到核心配置(不推荐)

@Configuration//表示这是一个配置类
@ComponentScan({"com.config","con.data"})//扫描配置类所在的包即可
public class SpringConfig {}@Configuration//表示这是一个配置类  
public class JdbcConfig {  @Beanpublic DataSource dataSource() {  DruidDataSource ds = new DruidDataSource();//......其它配置return ds; }  
}
  • 当我们配置类需要依赖其它类的时候
    • 简单类型可以使用 @Value 注解来获得简单类型的注入
    • 引用类型可以直接在形参上写入即可获得相应的类
@Configuration//表示这是一个配置类  
public class JdbcConfig {@Value("zhangsan")private String userName;@Value("123")private String passWord;@Beanpublic DataSource dataSource(Dao dao) {//在形参的位置写入需要的其它类即可,容器会根据类型自动装配DruidDataSource ds = new DruidDataSource();ds.setUsername(userName);ds.setPassword(passWord);//......其它配置System.out.println(dao);//此时便可直接使用return ds; }  
}

注解开发总结

xml配置对比注解配置

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

FastChat

FastChat https://github.com/lm-sys/FastChat 为服务基于大模型的chat应用, FastChat提供框架。 提供三个功能 training, serving, and evaluating 有评价功能、训练功能(fine tuning) 主要的还是 serving能力, 可以支持大模型的负载均衡FastChat is an open platform for…

.net事件

描述(做一个简单的记录): 事件(event)的本质是一个委托;(声明一个事件: public event TestDelegate eventTest;)  委托(delegate)可以理解为一个符合某种签名的方法类型;比如:TestDelegate委托的返回数据类型为string,参数为 int和EventPara,而TestI方…

学习如何分享

3、访问以下链接,下载工具:①打开可执行文件;②将XML文件拖动到窗口中,回车。https://files-cdn.cnblogs.com/files/codealone/博客采集工具.zip此时,开始自动将一篇文章设为一个html文件(博客采集工具\cnblogs):3、访问以下链接,下载工具:①打开可执行文件;②将XML…

海亮杯总结

写在前面: 100+100+30+0+20+20=270,rnk42,超级菜 你说的对,但是《第三届“海亮杯”》是由海亮教育集团自主研发的一款全新开放世界冒险游戏。游戏发生在一个被称作「浙江省诸暨海亮高级中学」的幻想世界,在这里,被神选中的人将被授予「正方形巧克力」,导引「数位和」之力…

力扣-83. 删除排序链表中的重复元素

1.题目 题目地址(83. 删除排序链表中的重复元素 - 力扣(LeetCode)) https://leetcode.cn/problems/remove-duplicates-from-sorted-list/ 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head = …

SAP 事务代码CU71报错 - 特性LOBM_LWEDT不存在 -

SAP 事务代码CU71报错 - 特性LOBM_LWEDT不存在 -1, 在事务代码CU71或者如下配置里。定义排序规则,试图使用SAP标准特性LOBM_LWEDT, SAP报错说:’特性LOBM_LWEDT不存在’。这是SAP系统上的一个标准的特性,怎么能不存在SAP系统上呢?2,解决方法:执行事务代码BMSM或者进入如下…

SAP S4HANA 2023 PCE系统上的SCC1?

SAP S4HANA 2023 PCE系统上的SCC1?在S/4 HANA 2023 PCE 系统上执行事务代码SCC1, 系统提示:”传输工具的旧副本已弃用,新的传输复制工具可用,是否继续执行新事务代码SCC1N?”. 点击按钮’是’, 系统进入如下界面:输入TR号码,输入源客户端,执行,进入如下结果界面,注:…