007,Spring混合装配

V哥官网:http://www.vgxit.com

本博客对应视频教程:http://www.vgxit.com/course/23


混合装配


1,概述

之前的课程介绍了最基本的装配Bean方法,我们对XML的方式和注解的方式都进行了讲解。在现实中,使用XML或者注解各有道理,V哥建议在自己的工程中所开发的类尽量使用注解方式,因为使用它并不困难,甚至可以说更为简单,而对于引入第三方包的类,尽量使用XML方式,这样的好处是可以尽量对三方包或者服务的细节减少理解,也更加清晰和明朗。

但是V哥给大家说一下,现在我们使用的是混合装配的方式。不过之后大家学习了Spring boot之后,XML的方式基本上是不会再使用了。都是注解的方式。


2,具体操作(基于注解的方式)

我们按照真实开发项目的一个流程,来给大家演示一下从数据库里面查询所有的用户数据的这么一个流程。

1,首先,我们创建对应的PO:

package com.vgxit.learn.spring.ktdm.blendioc.po;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {
    private Integer id;
    private String name;
    private Short gender;
    private Integer age;
    private String nickName;
}

2, 我们定义好对应的IUserService和UserService:

package com.vgxit.learn.spring.ktdm.blendioc.service;

import com.vgxit.learn.spring.ktdm.blendioc.po.User;

import java.sql.SQLException;
import java.util.List;

public interface IUserService {
    List<User> all() throws SQLException;
}
package com.vgxit.learn.spring.ktdm.blendioc.service.impl;

import com.vgxit.learn.spring.ktdm.blendioc.po.User;
import com.vgxit.learn.spring.ktdm.blendioc.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@Component
public class UserService implements IUserService {
    @Autowired
    private DataSource dataSource;
    @Override
    public List<User> all() throws SQLException {
        Connection conn = dataSource.getConnection();
        PreparedStatement ps = conn.prepareStatement("select * from user");
        ResultSet rs = ps.executeQuery();
        List<User> users = new ArrayList<>();
        try (conn;ps;rs){
            while (rs.next()) {
                User user = User.builder()
                        .id(rs.getInt("id"))
                        .gender(rs.getShort("gender"))
                        .age(rs.getInt("age"))
                        .name(rs.getString("name"))
                        .nickName(rs.getString("nick_name"))
                        .build();
                users.add(user);
            }
        }
        return users;
    }
}

3,定义一个Spring的配置文件,然后,其中配置druid对应的xml注入配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!--存放bean的容器-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置我们的数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis.ktdm?serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="Abc@123456"/>
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>
        <property name="maxActive" value="20"/>
    </bean>
</beans>

4,定义配置类,这里我们把扫描包调整到总包下面,还要在这个配置类下面引入对应的XML文件:

package com.vgxit.learn.spring.ktdm.blendioc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;

@ComponentScan(basePackages = "com.vgxit.learn.spring.ktdm.blendioc")
@ImportResource("classpath:spring-cfg.xml")//引入对应的xml配置文件
public class BlendiocConfig {
}

5,测试代码:

package com.vgxit.learn.spring.ktdm.blendioc.test;

import com.vgxit.learn.spring.ktdm.blendioc.config.BlendiocConfig;
import com.vgxit.learn.spring.ktdm.blendioc.po.User;
import com.vgxit.learn.spring.ktdm.blendioc.service.IUserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.sql.SQLException;
import java.util.List;

public class BlendiocTest001 {
    public static void main(String[] args) throws SQLException {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(BlendiocConfig.class);
        IUserService userService = ctx.getBean(IUserService.class);
        List<User> users = userService.all();
        users.forEach(System.out::println);
    }
}

3,混合装配的第二种方式(基于xml的装配方式):

1,我们在xml中加上context的xsd文件,然后配置我们要扫描的包的路劲:

<?xml version="1.0" encoding="UTF-8" ?>
<!--存放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">
    <!--配置我们扫描包的路劲-->
    <context:component-scan base-package="com.vgxit.learn.spring.ktdm.blendioc"/>
    <!--配置我们的数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis.ktdm?serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="Abc@123456"/>
        <property name="initialSize" value="1"/>
        <property name="minIdle" value="1"/>
        <property name="maxActive" value="20"/>
    </bean>
</beans>

2,加入我们的测试代码:

package com.vgxit.learn.spring.ktdm.blendioc.test;

import com.vgxit.learn.spring.ktdm.blendioc.po.User;
import com.vgxit.learn.spring.ktdm.blendioc.service.IUserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.sql.SQLException;
import java.util.List;

public class BlendiocTest001 {
    public static void main(String[] args) throws SQLException {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-cfg.xml");
        IUserService userService = ctx.getBean(IUserService.class);
        List<User> users = userService.all();
        users.forEach(System.out::println);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

V哥学It

赏小的一个钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值