Spring-IOC-(7.4-7.5)

    技术2025-12-02  23

    set注入方式:

    —————————————————————————————————


    配置数据源

    c3p0 Druid


    <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version> </version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>

    测试代码

    @Test //测试手动创建druid 数据源 public void test2() throws Exception { DruidDataSource dataSource=new DruidDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/student?&useSSL=false&serverTimezone=UTC"); dataSource.setUsername("root"); dataSource.setPassword("123456"); DruidPooledConnection connection=dataSource.getConnection(); System.out.println(connection); connection.close(); } @Test //测试手动创建c3p0 数据源 public void test1() throws PropertyVetoException, SQLException { ComboPooledDataSource dataSource=new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.cj.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/student?&useSSL=false&serverTimezone=UTC"); dataSource.setUser("root"); dataSource.setPassword("123456"); Connection connection=dataSource.getConnection(); System.out.println(connection); connection.close(); }

    抽取jdbc.properties文件


    resource下创建改文件:

    jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/student?&useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=123456

    测试代码

    @Test //测试手动创建c3p0 数据源(加载配置文件形式) public void test3() throws PropertyVetoException, SQLException { //读取配置文件 jdbc.properties ResourceBundle resourceBundle=ResourceBundle.getBundle("jdbc"); String driver= resourceBundle.getString("jdbc.driver"); String url= resourceBundle.getString("jdbc.url"); String username= resourceBundle.getString("jdbc.username"); String password= resourceBundle.getString("jdbc.password"); //创建数据源对象 ComboPooledDataSource dataSource=new ComboPooledDataSource(); dataSource.setDriverClass(driver); dataSource.setJdbcUrl(url); dataSource.setUser(username); dataSource.setPassword(password); Connection connection=dataSource.getConnection(); System.out.println(connection); connection.close();

    Spring配置数据源 加载properties文件

    @Test //测试spring容器产生数据源对象 public void test4() throws PropertyVetoException, SQLException { ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml"); DataSource dataSource= (DataSource) app.getBean("dataSource"); Connection connection=dataSource.getConnection(); System.out.println(connection); connection.close(); }

    创建applicationContext.xml文件

    <?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"> <!--加载外部的properties文件--> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="JdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> </beans>

    jdbc.properties文件

    jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/student?&useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=123456

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200705173502218.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjAzMzY4,size_16,color_FFFFFF,t_70 UserServiceImpl.java

    /*<bean id="userService" class="com.itheima.service.Impl.UserServiceImpl">*/ /*@Component("userService")*/ @Service("userService") @Scope("prototype") /*@Scope("singleton")*/ /*单例*/ public class UserServiceImpl implements UserService { @Value("${jdbc.driver}") private String driver; /*<property name="userDao1" ref="userDao"></property>*/ /* @Autowired//按照数据类型从spring容器中匹配注入 (如果没有Qualifier) @Qualifier("userDao") //按照ID名称匹配 而且必须结合Autowired一起用*/ @Resource(name="userDao")//@Resource相当于我们的 Autowired+Qualifier private UserDao userDao; /* public void setUserDao1(UserDao userDao) { this.userDao = userDao; }*/ public void save() { System.out.println(driver); userDao.save(); } @PostConstruct public void ini(){ System.out.println("service对象初始化方法"); } @PreDestroy public void destroy(){ System.out.println("service对象销毁方法"); } }

    UserDaoImpl.java

    /*<bean id="userDao" class="com.itheima.dao.Impl.UserDaoImpl"></bean>*/ /*@Component("userDao")*/ @Repository("userDao") public class UserDaoImpl implements UserDao { public void save(){ System.out.println("save running...."); } }

    UserContriller.java

    public class UserController { public static void main(String[] args) { /*自动关闭*/ /*ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");*/ /*手动关闭*/ ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService=app.getBean(UserService.class); userService.save(); app.close(); } }

    applicationContext.xml:

    <!--配置主键扫描--> <context:component-scan base-package="com.itheima"/>

    DataSourceConfiguration.java(非自定义Bean配置:数据源)

    //<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> @PropertySource("classpath:jdbc.properties") public class DataSourceConfiguration { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url ; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean("dataSource")//Spring会将当前方法的返回值以指定名称 存储到Spring容器 public DataSource getdataSource() throws PropertyVetoException { ComboPooledDataSource dataSource=new ComboPooledDataSource(); dataSource.setDriverClass(driver); dataSource.setJdbcUrl(url); dataSource.setUser(username); dataSource.setPassword(password); return dataSource; } }

    SpringCofiguration.java

    @Configuration//标志该类是Spring是核心配置类 //<context:component-scan base-package="com.itheima"/> @ComponentScan("com.itheima") /*<import resource="">*/ @Import({DataSourceConfiguration.class}) public class SpringCofiguration { }

    DateSourceTest.java

    public class DateSourceTest { @Test //测试spring容器产生数据源对象 public void test4() throws PropertyVetoException, SQLException { //配置文件开发 //ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml"); //注解开发 ApplicationContext app=new AnnotationConfigApplicationContext(SpringCofiguration.class); DataSource dataSource= (DataSource) app.getBean("dataSource"); Connection connection=dataSource.getConnection(); System.out.println(connection); connection.close(); } }

    配置文件:

    <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.5.RELEASE</version> </dependency>

    SpringJunitTest.java

    public class SpringJunitTest { @Autowired private UserService userService; @Autowired private DataSource dataSource; @Test public void test1() throws SQLException { userService.save(); System.out.println(dataSource.getConnection()); } }
    Processed: 0.041, SQL: 10