Spring 使用注解开发


Posted in Java/Android onMay 20, 2022

在Spring4之后 要使用注解开发 必须保证aop包导入了

Spring 使用注解开发

使用注解需要导入context约束 增加 注解的支持

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启注解的支持-->
    <context:annotation-config/>
</beans>

@Component:组件放在类上 说明这个类被Spring管理了 就是bean

import org.springframework.stereotype.Component;
//等价于<bean id="user" class="com.kero.pojo.User"/>
@Component
public class User {
    public String name = "xxx";
}

@Value

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//等价于<bean id="user" class="com.kero.pojo.User"/>
@Component
public class User {
    @Value("xxx")
//等价于<property name="name" value="xxx"/>
    public String name;
}

或者

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//等价于<bean id="user" class="com.kero.pojo.User"/>
@Component
public class User {  
    public String name;
    @Value("xxx")
    public void setName(String name) {
        this.name = name;
    }
}

@Component有几个衍生的注解 我们在Web开发中会按照MVC三层架构分层

·dao[@Repository]

·service[@Service]

·controller[@Controller]

这四个注解功能一样 都是代表将某个类注册到Spring中 装配Bean

Spring 使用注解开发

Spring 使用注解开发

Spring 使用注解开发

注解的作用域@Scope

@Scope 放在类上,默认是单例模式

@Scope(prototype)是原型模式,每次创建的都是一个新的对象

Spring 使用注解开发

其作用等价于

Spring 使用注解开发

补充:

@Scope("singleton") 或者@Scope 单例模式 下面代码输出结果为true

@Scope("prototype")下面代码输出结果为false

import com.kero.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
    public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = context.getBean("user", User.class);
        User user2 = context.getBean("user", User.class);
        System.out.println(user==user2);
    }
}

xml vs 注解

·xml更加万能 适用于任何场合 维护简单方便

·注解 不是自己类使用不聊 维护相对复杂

最佳实践:xml用来管理bean

注解只负责完成属性的注入

我们在使用的过程中 需要注意 使用以下代码

<!--指定要扫描的包 这个包下的注解就会生效->-->
    <context:component-scan base-package="com.kero"/>
    <!--开启注解的支持-->
    <context:annotation-config/>

针对最佳实践的例子

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
<!--指定要扫描的包 这个包下的注解就会生效->-->
    <context:component-scan base-package="com.kero"/>
    <!--开启注解的支持-->
    <context:annotation-config/>
    <bean id="user" class="com.kero.pojo.User" scope="prototype"/>
</beans>
import org.springframework.beans.factory.annotation.Value;
public class User {
    @Value("XXX")
    public String name;
    public void setName(String name) {
        this.name = name;
    }
}

到此这篇关于Spring详解使用注解开发流程的文章就介绍到这了!


Tags in this post...

Java/Android 相关文章推荐
Java实现简易的分词器功能
Jun 15 Java/Android
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
Java实现二维数组和稀疏数组之间的转换
Jun 27 Java/Android
每日六道java新手入门面试题,通往自由的道路
Jun 30 Java/Android
Java Socket实现多人聊天系统
Jul 15 Java/Android
JavaWeb 入门篇(3)ServletContext 详解 具体应用
Jul 16 Java/Android
Mybatis是这样防止sql注入的
Dec 06 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Springboot-cli 开发脚手架,权限认证,附demo演示
Apr 28 Java/Android
java版 简单三子棋游戏
May 04 Java/Android
HttpClient实现文件上传功能
Aug 14 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
Sep 23 Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
Java 轮询锁使用时遇到问题
May 11 #Java/Android
Java 死锁解决方案
May 11 #Java/Android
JAVA springCloud项目搭建流程
May 11 #Java/Android
Java死锁的排查
May 11 #Java/Android
Java线程的6种状态与生命周期
May 11 #Java/Android
Java 多线程协作作业之信号同步
May 11 #Java/Android
You might like
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
php实现学生管理系统
2020/03/21 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
python如何使用unittest测试接口
2018/04/04 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
python要安装在哪个盘
2020/06/15 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
2013英文求职信模板范文
2013/11/15 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
yy婚礼主持词
2014/03/14 职场文书
个人工作年终总结
2015/03/09 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python