SpringIOC操作Bean管理--最终章

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: SpringIOC操作Bean管理--最终章


外部属性文件

在我们编写配置文件的时候,经常要去在Bean注入一些对接数据库、nacos等一些系统部署信息的细节信息,如果直接把这些东西写到配置文件里面操作起来非常的不方便,为了优化这种问题,就出现了外部属性文件


如何直接配置数据库信息?

第一步:引入德鲁伊连接池依赖jar包


第二步:配置德鲁伊连接池

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd" >
   <!--直接配置连接池-->
    <bean id="dataSource"  class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/userDb"></property>
        <property name="username" value="root"></property>
        <property name="password" value="2022"></property>
    </bean>
 </beans>



引入外部属性文件配置数据库连接池

第一步:创建外部属性文件,properties格式文件,写数据库信息

prop.driverClass:com.mysql.jdbc.Driver
prop.url:jdbc:mysql://localhost:3306/userDb
prop.userName:root
prop.password:2022

第二步:把外部properties属性文件引入到spring配置文件

*引入context名称空间

*在spring配置文件使用标签引入外部属性文件

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd" >
    <!--引入外部属性文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置连接池-->
        <bean id="dataSource"  class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName" value="${prop.driverClass}"></property>
            <property name="url" value="${prop.url}"></property>
            <property name="username" value="${prop.userName}"></property>
            <property name="password" value="${prop.password}"></property>
        </bean>
</beans>

IOC操作Bean管理(基于注解方式)

什么是注解?

(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值)

(2)使用注解,注解作用在类上面,方法上面,属性上面

(3)使用注解的目的,简化xml配置


利用注解创建对象

可以实现创建对象的注解有:@Component、@Service、@Controller、@Repository 上面四个注解功能是一样的,都可以用来创建bean实例
第一步 引入依赖


第二步 开启组件扫描

<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 http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启组件扫描
    1.如果扫描多个包,多个包逗号隔开
    2.扫描上层目录-->
    <context:component-scan base-package="com.ioc.spring5"></context:component-scan>
</beans>

第三步 创建类,在类上面添加创建对象注解

//注解里面value属性值可以省略不写,
//默认值是类名称,首字母小写
//UserService -- userService
@Component(value = "userService") //<bean id="userService" class=".."/>
public class UserService {
    public void add(){
        System.out.println("service add......");
    }
}

基于注解方式实现属性注入

(1)@AutoWired:根据属性类型进行自动装配

第一步:把service和dao对象创建,在service和dao类添加创建对象注解
第二步:在service注入dao对象,在service类添加dao类属性,在属性上面使用注解

(2)@Qualifer:根据属性名称进行注入

当一个接口有多个实现类,根据类型用不知道用那个,就要派它上场,和@AutoWired一起来使用了

(3)@Resource:可以根据类型注入,可以根据名称注入

(4)@Value:注入普通类型属性

代码示例:
service类:

//注解里面value属性值可以省略不写,
//默认值是类名称,首字母小写
//UserService -- userService
@Component(value = "userService") //<bean id="userService" class=".."/>
public class UserService {
    //定义dao类型属性
    //不需要添加set方法
    //添加注入属性注解
//    @Autowired
//    @Qualifier(value = "userDaoImpl")
//    private UserDao userDao;
//    @Resource //根据类型注入
    @Resource(name = "userDaoImpl")
    private UserDao userDao;
    @Value(value = "abc")
    private String name;
    public void add(){
        System.out.println("service add......"+name);
        userDao.add();
    }
}

dao类:

@Repository
public class UserDaoImpl implements UserDao{
    @Override
    public void add() {
        System.out.println("dao add");
    }
}

dao接口:

public interface UserDao {
    public void add();
}

完全注解实现

创建配置类,替代xml配置文件
代码示例:

@Configuration //作为配置类,替代xml配置文件
@ComponentScan(basePackages = {"com.ioc"})
public class SpringConfig {
}
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
11月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
569 4
|
11月前
|
安全 前端开发 搜索推荐
如何创建一个网站?
网站建设是指创建和开发一个网站的过程,它涵盖了从规划、设计到实施、发布以及维护网站的整个过程。
3042 3
|
存储 数据处理 Kotlin
Kotlin Flow背后的神秘力量:背压、缓冲与合并策略的终极揭秘!
【9月更文挑战第13天】Kotlin Flow 是 Kotlin 协程库中处理异步数据流的强大工具,本文通过对比传统方法,深入探讨 Flow 的背压、缓冲及合并策略。背压通过 `buffer` 函数控制生产者和消费者的速率,避免过载;缓冲则允许数据暂存,使消费者按需消费;合并策略如 `merge`、`combine` 和 `zip` 则帮助处理多数据源的整合。通过这些功能,Flow 能更高效地应对复杂数据处理场景。
435 2
|
机器学习/深度学习 自然语言处理 算法
AIGC技术的核心算法与发展趋势
【7月更文第27天】随着人工智能技术的迅速发展,AIGC技术已经逐渐成为内容创造领域的一个重要组成部分。这些技术不仅能够帮助人们提高工作效率,还能创造出以往难以想象的新颖内容。本文将重点介绍几种核心算法,并通过一个简单的代码示例来展示如何使用这些算法。
383 7
|
JavaScript
vue 打包后自动部署到云服务器——scp2教程
vue 打包后自动部署到云服务器——scp2教程
282 0
|
IDE Linux 开发工具
CentOS7.4+REDHAWK2.3.1安装教程——折腾篇
CentOS7.4+REDHAWK2.3.1安装教程——折腾篇
222 0
|
负载均衡 关系型数据库 分布式数据库
【PolarDB开源】PolarDB读写分离实践:优化读取性能与负载均衡策略
【5月更文挑战第26天】PolarDB是云原生关系型数据库,通过读写分离优化性能和扩展性。它设置主节点处理写操作,从节点处理读操作,异步复制保证数据一致性。优化读取性能的策略包括增加从节点数量、使用只读实例和智能分配读请求。负载均衡策略涉及基于权重、连接数和地理位置的分配。实践示例中,电商网站通过主从架构、只读实例和负载均衡策略提升商品查询效率。PolarDB的读写分离与负载均衡为企业应对大数据和高并发提供了有效解决方案。
458 0
|
算法 Java UED
深入解析CMS垃圾回收器
在CMS之前的垃圾回收器,要么就是串行垃圾回收方式,要么就是关注系统吞吐量,而 CMS 垃圾回收器的出现,则打破了这个尴尬的局面。
500 0
深入解析CMS垃圾回收器
报错:error Parsing error: x-invalid-end-tag
报错:error Parsing error: x-invalid-end-tag
270 0