首页 > 其他分享 >Spring注解开发

Spring注解开发

时间:2024-05-01 19:22:22浏览次数:19  
标签:Spring class 配置 public 开发 注解 Configuration ds

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

注解开发总结

xml配置对比注解配置

image.png

标签:Spring,class,配置,public,开发,注解,Configuration,ds
From: https://www.cnblogs.com/fyislo/p/18169564

相关文章

  • Spring配置相关
    SpringSpring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%专业角度简化开发:降低企业级开发的复杂性框架整合:高效整合其他技术,提高企业级应用开发与运行效率初识Spring了解Spring家族Spring官网:https://spring.io/Spring发展到今天已经形成了一种开发的生态......
  • SpringBoot Jpa多条件查询
    RepositoryMyRepositoryextendsJpaRepository<MyEntity,Integer>精确查询:Example包装EntityPageablepageable=PageRequest.of(current-1,pageSize);//myEntity实体类参数Exampleexample=Example.of(myEntity);Page<MyEntity>page=myRepository.fin......
  • 区块链开发七天实用指南(全)
    原文:zh.annas-archive.org/md5/af79b3f5ee1ede6c2518deb93a96c328译者:飞龙协议:CCBY-NC-SA4.0前言区块链是一项革命性技术,以太坊是一个运行智能合约的分散式区块链平台。7天实战区块链开发将教会你如何使用以太坊区块链构建一个在线游戏应用。本书的每一部分都将介绍与创......
  • SpringBoot 打包所有依赖
    SpringBoot项目打包的时候可以通过插件spring-boot-maven-plugin来repackage项目,使得打的包中包含所有依赖,可以直接运行。例如:<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId&g......
  • SpringBoot 循环引用解决办法
    Spring原生是允许并解决了单层循环引用的,但从SpringBoot2.6.0开始,默认禁止Bean之间的循环引用,如果存在循环引用就会启动失败报错。此时要解决循环引用问题有两个办法:设置Spring允许循环引用(推荐)。spring:main:allow-circular-references:true在循环引用......
  • 从自定义一个作用域开始来了解SpringBean的作用域
    你好,这里是codetrend专栏“Spring6全攻略”。在Spring框架中,Bean的作用域(Scope)定义了Bean实例在容器中如何创建、管理和销毁的策略。Spring提供了多种Bean作用域,每种作用域都有其特定的生命周期和适用场景。先试试不同的BeanScope下面通过一个简单的SpringMVCCon......
  • 《Node.js+Vue.js+MangoDB全栈开发实战》已出版
    《Node.js+Vue.js+MangoDB全栈开发实战》随书源码下载地址:链接:https://pan.baidu.com/s/1DQYgPZLmtJCIuDXs8gub_w?pwd=1127提取码:1127课件下载地址:链接:https://pan.baidu.com/s/1M36y1xu-gIUidDxw38GlBg提取码:1988随书目录目   录第1章 Node.js和TypeScript基础·......
  • Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步
    1.Spring6当中Bean的生命周期的详细解析:有五步,有七步,有十步@目录1.Spring6当中Bean的生命周期的详细解析:有五步,有七步,有十步每博一文案1.1什么是Bean的生命周期1.2Bean的生命周期"五步"1.3Bean的生命周期“七步”1.4Bean的生命周期“十步”2.Bean的作用域不......
  • C#开发的CPU使用率小应用 - 开源研究系列文章 - 个人小作品
          这次用C#编写一个CPU使用率的小应用。想了一下,大概需要两个内容:一个是获取CPU使用率;一个是托盘图标的动画效果。这两个内容在上次的博文中有介绍了,此博文为具体的应用的例子。      对于要实现的应用,首先需要先研究下其需要什么技术内容,然后一个个的去研究及......
  • 26-Spring源码分析(一)
    1.Spring架构设计Spring框架是一个分层架构,他包含一系列的功能要素,并被分为大约20个模块。1.1设计理念Spring是面向Bean的编程(BOP:BeanOrientedProgramming),Bean在Spring中才是真正的主角。Bean在Spring中作用就像Object对OOP的意义一样,没有对象的概念就像......