广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java Spring框架的注解式开发你了解吗
  • 927
分享到

Java Spring框架的注解式开发你了解吗

2024-04-02 19:04:59 927人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. spring框架的注解式开发1.1 开启注解扫描配置1.2 实例化相关注解1.3 控制对象的创建次数的注解1.4 注入相关的注解1.5 控制事务的相关注解总结1. Spri

1. Spring框架的注解式开发

# Spring框架的注解式(Annotation)开发
1. 注解式开发
	定义:通过Spring框架提供的一系列注解来完成项目中快速开发
	注解:Annotation是java中一种特殊的类 类似于interface 使用时:@注解类名(属性=参数) @Param(mybatis中做参数绑定的注解)
	注意:Spring框架提供的这些注解日后仅仅能在和Spring去做一系列项目的时候去用,这是Spring框架为我们提供的。
	为什么Spring框架要提供这么一套注解去帮助我们呢,原因是现有的开发方式中开发效率很低下,随着组件的增多,
	比如UserService、UserAction...大家会发现在做现有的配置文件进行开发时,每写一个业务层,就需要在spring.xml
	文件中通过bean标签去注册,有的时候忘了在工厂中注册的时候,用的时候还会产生空指针异常问题。所以Spring框架为了让大家
	专注于业务逻辑处理,不想每次开发一个组件时还要去写一个配置,每次开发一个组件时还需要写一个配置这样是不是影响了开发
	效率啊。所以Spring框架就想了,能不能为程序员提供一种便利呢,这种便利就是日后不需要它再做配置就完成工厂创建、注入
	相关的一些操作,怎么去做呢。所以在Spring中它给我们提供了一系列的相关注解帮助我们去做快速开发。
2. spring中的注解
	前置条件:必须在工厂配置文件中完成注解的扫描
			<!--下面这个标签就是用来做注解扫描的 base-package:指定扫描哪些包的注解-->
			<context:component-scan base-package="com.baizhi"> 
			在用注解的时候能让spring框架去看到这些注解或者说去扫描到这些注解,
			那spring框架怎么去读呢,spring有一个spring.xml这样的一个配置文
			件,是不是得让加载这个配置时要通过这个配置文件扫描到注解啊。
	1). 创建对象相关注解
		  @Component注解		通用组件创建注解	父类注解
		  	  作用:用来负责对象的创建 ==========> 简化<bean class="" id="">
		  	  修饰范围:只能用在类上
		  	  注意:默认使用这个注解在工厂中创建的对象的唯一标识为 类名首字母小写  UserDAOImpl ===> userDAOImpl
		  	  value属性的作用:用来指定创建的对象在工厂中的唯一标识  推荐:存在接口则名字设置为接口首字母小写 不存在使用默认
		  	  @Component("userDAO") 等价于 @Component(value = "userDAO")
		   子类注解:沿用了父类注解的一切特性,也就是说下面三个注解也能用来创建对象
		   		@Repository		作用:一般用来创建DAO中组件的注解
                @Service		作用:一般用来创建Service中组件的注解
                @Controller		作用:一般用来创建Action中组件的注解
	2). 控制对象在工厂中创建次数		默认工厂单例创建
			a. 配置文件修改	<bean class="" id="" scope="singleton|prototype">
			b. 注解如何控制
			@Scope
				作用:	  用来指定对象的创建次数默认单例
				修饰范围:只能加在类上
				value属性:singleton 单例 默认|prototype 多例
				@Scope("prototype") =====> 等价于 @Scope(value = "prototype")
				@Scope("singleton") =====> 等价于 @Scope(value = "singleton")默认是单例,如果想设置为单例,可以不写
				注意:在管理structs的action时必须加入@Scope注解值必须为prototype
	3). 属性注入的相关注解
			下面两个都能用
			a. spring框架提供的	@Autowired :注意 默认根据类型进行注入	推荐
			b. javaEE本身就有的	@Resource  :注意 默认根据名字注入,名称找不到时自动根据类型进行注入
			修饰范围:用在类中的成员变量或者是用在类中成员变量的SET方法上
			作用	 :用来完成成员变量的赋值|注入操作
			注意:使用注解进行注入时,日后注入的成员变量可以不再提供SET方法
	4). 控制事务的注解
		@Transactional
			作用:用来给类种方法加入事务控制 简化配置文件中 两段配置 1. 事务通知及事务细粒度配置	2. 简化事务切面配置
			修饰范围:类	| 方法上	局部优先原则
            		1. 加载类上	代表类中所有方法加入事务控制
            		2. 加在方法上 代表当前方法加入事务控制
            		3. 类和方法同时存在	方法优先
            使用要求:如果想要让@Transactional这个注解生效必须在配置文件中加入如下注解:
                    <!--开启注解式事务生效-->
                    <!--必须是tx结尾的包下的-->
                    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
            注解属性:
            @Transactional(propagation = Propagation.SUPPORTS,
                        isolation = Isolation.READ_COMMITTED,
                        rollbackFor = {java.lang.RuntimeException.class},
                        noRollbackFor = {},
                        readOnly = false,
                        timeout = -1)   // 当然这些都推荐大家使用默认,唯独有一个方法有点特殊,就是查询方法,不需要去明确										  // 的把它加入事务,所以建议在查询方法上@Transactional(propagation =                                               //Propagation.SUPPORTS)让它去支持事务	
 注意:使用了@Transactional注解代理原有配置文件中的创建事务环绕通知细粒度控制和配置事务切面这两段配置
    <!--创建事务环绕通知并进行事务细粒度控制-->
    <!--transaction-manager找ref -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*"/>
            <tx:method name="update*"/>
            <tx:method name="delete*"/>
            <tx:method name="find*" propagation="SUPPORTS"/>
        </tx:attributes>
    </tx:advice>
    <!--配置事务切面-->
    <aop:config>
        <aop:pointcut id="pc" expression="execution(* com.baizhi.service.*ServiceImpl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
    </aop:config>
    但是下面的这些配置该写还得写
    <!--创建数据源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="com.Mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/lb?characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="passWord" value="root"/>
    </bean>
    <!--创建sqlSessionFactoy-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
        <!--注入datasource mapperLocations typeAliasesPackage-->
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:com/baizhi/mapper/*.xml"/>
        <property name="typeAliasesPackage" value="com.baizhi.eneity"/>
    </bean>
    <!--创建DAO-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入sqlSessionFactory dao接口所在包-->
        <!--value要的是sqlSessionFactory在工厂中的名字-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.baizhi.dao"/>
    </bean>
    <!--创建事务管理器-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

1.1 开启注解扫描配置

	<!--开启注解扫描-->
  <context:component-scan base-package="com.baizhi"/>

1.2 实例化相关注解

# 1. @Component(value="userService")
				修饰范围:    用在类上
				注解作用:    通用的创建实例的注解,用来创建当前这个类的实例
				value属性:  用来指定创建的对象在工厂中的唯一标识   如果不指定默认创建对象在工厂中的标识为类名首字母小写
# 2. @Repository 
				修饰范围:    用在类上
				注解作用:    @component的子类注解专用于DAO组件的创建,通常加在DAO组件上
				value属性:  用来指定创建的对象在工厂中的唯一标识   如果不指定默认创建对象在工厂中的标识为类名首字母小写
# 3. @Service
				修饰范围:    用在类上
				注解作用:    @component的子类注解专用于Service组件的创建,通常加在Service组件上
				value属性:  用来指定创建的对象在工厂中的唯一标识   如果不指定默认创建对象在工厂中的标识为类名首字母小写
# 4. @Controller
			    修饰范围:    用在类上
				注解作用:    @component的子类注解专用于Action组件的创建,通常加在Action组件上
				value属性:  用来指定创建的对象在工厂中的唯一标识   如果不指定默认创建对象在工厂中的标识为类名首字母小写
	注:除了以上三种DAO、Service、Action三种组件分别创建时使用三种子类注解,其余的组件创建时使用 @Component注解
@Repository("userDAO")
public class UserDAOImpl implements UserDAO{
@Service("userService")public class UserServiceImpl implements UserService{

1.3 控制对象的创建次数的注解

 # 1. @Scope(value="singleton|prototype")
 			  	修饰范围:    用在类上
			  	注解作用:    用来控制这个实例在工厂中的创建次数
				value属性:   singleton为单例,prototype为多例   默认单例
@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService{

1.4 注入相关的注解

# 1. @Autowired(Spring提供)
				修饰范围:    用在成员变量或成员变量的GET/SET方法上
				注解作用:	 用来给类中成员变量赋值
				注入原则:    默认根据类型自动注入
# 2. @Resource(JAVAEE提供)
				修饰范围:    用在成员变量或成员变量的GET/SET方法上
				注解作用:    用来给类中成员变量赋值
				注入原则:    默认根据名称自动注入名称找不到根据类型自动注入
	注意:使用注解进行注入时,日后注入的成员变量可以不再提供SET方法
@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDAO userDAO;

1.5 控制事务的相关注解

# 1. @Transactional
			    修饰范围:    用在类上主要用在业务层组件类上或者是方法上
				注解作用:   用来给类中方法加入事务,当类上和方法上同时存在该注解时局部优先
				注解属性:    
							propagation  用来控制传播属性				赋值时使用枚举类
							Isolation    用来控制隔离级别				赋值时使用枚举类	一般使用默认
							timeout      用来设置超时性                 赋值代表超时时间	一般使用默认
							rollback-for 用来设置什么异常回滚			   赋值时给class	 一般使用默认
							norollback-for 用来设置什么异常不会滚		  赋值时给class      一般使用默认
							readonly     用来设置事务读写性				true/false       一般使用默认
				注意:如果要使用事务注解在配置文件中必须开启事务注解生效加入如下配置:
				    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
	使用事务相关注解只可以简化配置文件中 两段配置 1. 事务通知及事务细粒度配置	2. 简化事务切面配置
	但是其他的比如创建数据源、创建sqlSessionFactoy、创建DAO、创建事务管理器还是要写的
	因为对于增、删、改的事务属性我们一般都使用默认,在进行事务控制时只需要在类上加一个@Transactional即可,属性不写即
	代表使用默认,但是对于查询方法我们要加入局部注解@Transactional(propagation = Propagation.SUPPORTS)使查询
	方法支持事务
// 事务的使用 一般在给类加控制事务的注解时,不修改属性,使用默认,下面只是为了演示注解的使用
@Service("userService")
@Scope("prototype")
@Transactional(propagation = Propagation.SUPPORTS,
                isolation = Isolation.READ_COMMITTED,
                rollbackFor = {java.lang.RuntimeException.class},
                noRollbackFor = {},
                readOnly = false,
                timeout = -1)   // 当然这些都推荐大家使用默认,唯独有一个方法有点特殊,就是查询方法,不需要去明确的
                                // 把它加入事务,所以建议在查询方法上@Transactional(propagation = Propagation.SUPPORTS)
                                // 让它去支持事务
public class UserServiceImpl implements UserService{    
// 平常使用
@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDAO userDAO;
    public void save(String name) {
        userDAO.save(name);
        System.out.println("Service:" + name);
    }
    @Transactional(propagation = Propagation.SUPPORTS)
    public void find() {
    }
}

注意:在使用控制事务的注解时,需要给类加上不修改任何属性的注解@Transactional,另外还需要给find查询方法加上局部注解@Transactional(propagation = Propagation.SUPPORTS)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!   

--结束END--

本文标题: Java Spring框架的注解式开发你了解吗

本文链接: https://www.lsjlt.com/news/142008.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java Spring框架的注解式开发你了解吗
    目录1. Spring框架的注解式开发1.1 开启注解扫描配置1.2 实例化相关注解1.3 控制对象的创建次数的注解1.4 注入相关的注解1.5 控制事务的相关注解总结1. Spri...
    99+
    2022-11-13
  • Java分布式开发必备框架,你真的了解吗?
    随着互联网技术的发展,越来越多的企业开始采用分布式架构来构建应用程序,以满足高并发、高可靠、高性能等需求。而在Java分布式开发中,一些框架被广泛使用,本文将介绍几个必备框架,帮助你更好地理解和应用分布式开发。 Spring Cloud...
    99+
    2023-09-30
    分布式 windows 框架
  • 带你详细了解Spring Security的注解方式开发
    目录默认情况下,不会开启注解,如果想用注解,需要开启注解支持。总结默认情况下,不会开启注解,如果想用注解,需要开启注解支持。 在启动类上开启: @EnableGlobalMethod...
    99+
    2022-11-12
  • 你了解Spring框架中的数据类型吗?
    Spring框架是一个非常流行的Java开发框架,它提供了很多便捷的功能,包括数据类型的处理。在这篇文章中,我们将介绍Spring框架中的数据类型,并提供一些示例代码。 基本数据类型 Spring框架中支持Java的基本数据类型,包括i...
    99+
    2023-08-19
    数据类型 spring windows
  • Spring框架基于注解开发CRUD详解
    Spring框架基于注解开发CRUD,供大家参考,具体内容如下 1. Maven坐标 <!-- https://mvnrepository.com/artifact/org.s...
    99+
    2022-11-13
  • PHP框架在Windows下开发的新趋势,你了解吗?
    在过去,PHP框架在Windows下的开发一直被认为是一个比较棘手的问题。由于Windows的文件系统和路径格式与Linux有很大的不同,这使得PHP框架在Windows下的开发难以顺利进行。然而,随着Windows操作系统的不断发展,越...
    99+
    2023-09-21
    框架 windows 面试
  • Java同步框架API:你真的了解它吗?
    Java是一个非常流行的编程语言,它的强大之处在于它提供了许多非常有用的API,其中包括同步框架API。同步是指多个线程在共享相同资源时需要互相协调和同步,以避免出现竞争条件和数据不一致等问题。在Java中,同步框架API提供了一些有用的...
    99+
    2023-09-05
    同步 框架 api
  • Spring MVC 中的 JavaScript 开发技巧,你了解吗?
    在 Web 开发中,JavaScript 是不可或缺的一部分。在 Spring MVC 中,JavaScript 也扮演着非常重要的角色。在本文中,我们将介绍一些 Spring MVC 中的 JavaScript 开发技巧,帮助您更好地开...
    99+
    2023-07-02
    spring 文件 javascript
  • ASP、Spring、Django三种框架的优缺点对比,你了解吗?
    ASP、Spring、Django是三个不同的Web框架,它们各自都有自己的优点和缺点。在本文中,我们将探讨这三种框架的优缺点,并进行比较。 ASP ASP(Active Server Pages)是由Microsoft开发的Web应用...
    99+
    2023-10-11
    spring 学习笔记 django
  • Java API面试中的Spring框架:你准备好了吗?
    在Java开发领域中,Spring框架几乎已经成为了必备的技能。无论是在面试还是实际开发中,对Spring框架的掌握程度都是衡量一个Java开发人员水平的重要标准。本文将从面试角度出发,介绍Spring框架的一些常见问题以及代码演示。 ...
    99+
    2023-09-15
    api 面试 spring
  • Java和Laravel文件框架:你真的了解它们吗?
    Java和Laravel是两个流行的编程语言和框架,它们在文件框架方面有着不同的实现。在本文中,我们将深入探讨Java和Laravel文件框架的异同点,帮助你更好地了解它们。 Java文件框架 Java是一种广泛使用的编程语言,它具有跨平台...
    99+
    2023-08-26
    laravel 文件 框架
  • ASP 框架教程:你真的理解了吗?
    ASP框架教程:你真的理解了吗? ASP框架是一个非常流行的Web应用程序开发框架,使用了Microsoft ASP.NET技术。这个框架的目的是为了让开发人员更快速、更容易地创建Web应用程序。但是,ASP框架的概念并不容易理解,因此在这...
    99+
    2023-08-05
    框架 教程 学习笔记
  • 你了解Java开发技术的API索引吗?
    Java是一种流行的编程语言,广泛应用于软件开发行业。Java的开发技术涉及众多的API,这些API提供了各种各样的功能和方法,开发人员可以使用这些API来快速开发高质量的应用程序。然而,对于许多初学者来说,Java的API索引可能会感到有...
    99+
    2023-08-10
    开发技术 api 索引
  • 你了解Java开发中的路径配置吗?
    Java开发中的路径配置是一个非常重要的概念,对于Java开发者来说是必须掌握的知识点。在Java开发中,路径配置主要指的是如何正确地指定Java程序中需要使用的文件或目录的路径。在本篇文章中,我们将深入探讨Java开发中的路径配置,以及如...
    99+
    2023-11-07
    path 分布式 开发技术
  • Java Spring的使用注解开发详解
    目录使用注解开发1.bean2.属性如何注入3.衍生的注解4.自动装配5.作用域6.小结代码show1.新建一个模块:2.新建pojo包及类3.新建dao包及类4.新建service...
    99+
    2022-11-12
  • ASP分布式架构,你真的了解吗?
    ASP(Active Server Pages)是一种动态网页开发技术,它允许开发人员使用服务器端脚本语言生成动态内容。ASP分布式架构是在ASP技术的基础上,通过分布式技术实现的一种多节点协作的架构。在本文中,我们将深入探讨ASP分布式架...
    99+
    2023-06-14
    分布式 面试 函数
  • 你了解GO语言和Django框架的区别吗?
    GO语言和Django框架是两个在编程领域中非常流行的技术。虽然它们都可以用于web开发,但它们的本质和使用方式是不同的。在这篇文章中,我们将探讨GO语言和Django框架之间的区别,以及它们各自的优缺点。 GO语言和Django框架之间的...
    99+
    2023-08-02
    关键字 django 框架
  • PHP Windows 异步编程框架,你真的了解吗?
    在现代软件开发中,异步编程已经成为一种非常流行的编程方式。异步编程可以让我们更好地利用计算机的多核心资源,提高程序的性能和响应速度。而在 PHP 开发中,异步编程也越来越受到开发者的关注和使用。 在 Windows 平台上,PHP 异步编...
    99+
    2023-08-16
    windows 异步编程 框架
  • 一文带你了解Spring中@Enable开头注解的使用
    目录@Enable 注解@Import 注解为什么要使用 @Import 注解呢总结@Enable 注解 首先我们先看一下有哪些常用的 @Enable 开头的注解...
    99+
    2022-11-13
  • ASP.NET Core 的开发框架,你是否了解其中的优缺点?
    ASP.NET Core是一个开源的Web开发框架,它采用了跨平台的方式,同时支持Windows、Linux和macOS等多种操作系统。ASP.NET Core的开发框架为开发人员提供了丰富的API和工具,使得开发Web应用程序更加便捷和高...
    99+
    2023-07-23
    bash leetcode 并发
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作