Sping——02 loc和Dl注解开发

02 loc和Dl注解开发

  • 1.Spring配置数据源
    • 1.1数据源作用和开发步骤
    • 1.2 数据源的手动创建
    • 1.3 Spring配置数据源
    • 1.4 抽取jdbc配置文件
  • 2.Spring注解开发
    • 2.1Spring原始注解
    • 2.2 Spring新注解
  • 3. Spring整合junit
    • 3.1 原始junit测试Spring的问题
    • 3.2 Spring集成Junit步骤

1.Spring配置数据源

1.1数据源作用和开发步骤

• 数据源(连接池)是提高程序性能如出现的
• 事先实例化数据源,初始化部分连接资源
• 使用连接资源时从数据源中获取
• 使用完毕后将连接资源归还给数据源

常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid等

1.1 数据源的开发步骤
① 导入数据源的坐标和数据库驱动坐标
② 创建数据源对象
③ 设置数据源的基本连接数据
④ 使用数据源获取连接资源和归还连接资源

1.2 数据源的手动创建

① 导入c3p0和druid的坐标


 <dependency>
            <groupId>c3p0groupId>
            <artifactId>c3p0artifactId>
            <version>0.9.1.2version>
        dependency>

  <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
            <version>1.1.16version>
        dependency>

② 创建C3P0连接池

//测试手动创建c3p0数据源
    public void test1() throws Exception {
        //创建数据源
        ComboPooledDataSource dataSource =new ComboPooledDataSource();
        //设置基本的链接参数
        dataSource.setDriverClass("com.mysql.jdbc.Driver");//驱动
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");//地址
        dataSource.setUser("root");//用户名
        dataSource.setPassword("root");//用户密码
        Connection connection = dataSource.getConnection();//获取资源
        System.out.println(connection);
        connection.close();//归还链接资源

② 创建Druid连接池

 @Test
    public void test2()throws Exception{
        //创建数据源
        DruidDataSource dataSource=new DruidDataSource();
        //
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        //使用数据源获取连接资源和归还连接资源
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

③ 提取jdbc.properties配置文件

jdbc.drive =com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

方便解耦,以后直接可以改配置文件

@Test
    //测试手动创建c3p0数据源(加载properties配置文件)
    public void test3() throws Exception {
        //读取配置文件
        ResourceBundle rb= ResourceBundle.getBundle("jdbc");
        String driver=rb.getString("jdbc.driver");
        String url=rb.getString("jdbc.url");
        String username=rb.getString("jdbc.username");
        String password=rb.getString("jdbc.password");

        //创建数据源
        ComboPooledDataSource dataSource =new ComboPooledDataSource();
        //设置基本的链接参数 通过set方法注入
        dataSource.setDriverClass(driver);//驱动
        dataSource.setJdbcUrl(url);//地址
        dataSource.setUser(username);//用户名
        dataSource.setPassword(password);//用户密码

        Connection connection = dataSource.getConnection();//获取资源
        System.out.println(connection);
        connection.close();//归还链接资源

    }

1.3 Spring配置数据源

导入坐标

  <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>5.0.5.RELEASEversion>
    dependency>

spring配置文件

 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver">property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test">property>
        <property name="user" value="root">property>
        <property name="password" value="root">property>
    bean>

测试从容器当中获取数据源

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

    }

Connection connection=dataSource.getConnection(); 中getConnection()爆红 是因为导入包导错

1.4 抽取jdbc配置文件

applicationContext.xml加载jdbc.properties配置文件获得连接信息。
引入context命名空间和约束路径
命名空间: xmlns:context="http://www.springframework.org/schema/context"
约束路径:

   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.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

Sping——02 loc和Dl注解开发_第1张图片

2.Spring注解开发

2.1Spring原始注解

Sping——02 loc和Dl注解开发_第2张图片

注意:使用注解进行开发,需要在,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean
需要进行扫描以便识别使用注解配置的类、字段和方法。

注解的组件扫描

<context:component-scan base-package="com.itheima">context:componentscan>`

使用@Compont或@Repository标识UserDaoImpl需要Spring进行实例化。

 package com.itheima.dao.imp;

import com.itheima.dao.UserDao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

//
//@Component("userDao")
@Repository("userDao")
public class UserDaolmpl implements UserDao {
    public void save(){
        System.out.println("save running....");
    }
}

使用@Compont或@Service标识UserServiceImpl需要Spring进行实例化
使用@Autowired或者@Autowired+@Qulifier或者@Resource进行userDao的注入

//
//@Component("userService")
@Service("userService")
public class UserServicelmpl implements UserService {
    //
   // @Autowired //按照数据类型从Spring容器中进行匹配的
   //@Qualifier("userDao") //按照id名称从容器中进行匹配 但是注意此处要结合autwired一起用
    @Resource(name = "userDao")
    private UserDao userDao;
   /* public void setUserDao(UserDao userDao){
        this.userDao=userDao;
    }//set方法 如果使用的是xml set方法是需要写的 如果用的是注解 set方法可以不写
    */
    public void save(){
        userDao.save();
    }
}

使用@Value进行字符串的注入


@Repository("userDao")
public class UserDaoImpl implements UserDao {
	@Value("注入普通数据")
	private String str;
	@Value("${jdbc.driver}")
	private String driver;
	@Override
	public void save() {
		System.out.println(str);
		System.out.println(driver);
		System.out.println("save running... ...");
} }

使用@Scope标注Bean的范围

//@Scope("prototype")
@Scope("singleton")
public class UserDaoImpl implements UserDao {
//此处省略代码
}

使用@PostConstruct标注初始化方法,使用@PreDestroy标注销毁方法

@PostConstruct
public void init(){
	System.out.println("初始化方法....");
}
@PreDestroy
public void destroy(){
	System.out.println("销毁方法.....");
}

2.2 Spring新注解

Sping——02 loc和Dl注解开发_第3张图片
@Configuration
@ComponentScan
@Import

package com.itheima.config;

import org.springframework.context.annotation.*;

//标志该类是Spring的核心配置类
@Configuration

//  
//    
@ComponentScan("com.itheima")

//
@Import(DataSourceConfiguration.class)

public class SpringCofiguration {


    }

@PropertySource
@value
@Bean

package com.itheima.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

//
//
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {
    @Value("${jdbc.driver}")
    private  String driver;
    @Value("${jdbc.url}")
    private  String url;
    @Value("${jdbc.url}")
    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;
    }

}

测试加载核心配置类创建Spring容器

@Test
public void testAnnoConfiguration() throws Exception {
ApplicationContext applicationContext = new 
AnnotationConfigApplicationContext(SpringConfiguration.class);
UserService userService = (UserService) 
applicationContext.getBean("userService");
userService.save();
DataSource dataSource = (DataSource) 
applicationContext.getBean("dataSource");
Connection connection = dataSource.getConnection();
System.out.println(connection);
}

3. Spring整合junit

3.1 原始junit测试Spring的问题

在测试类中,每个测试方法都有以下两行代码:

ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountService as = ac.getBean("accountService",IAccountService.class);

这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。

解决思路
• 让SpringJunit负责创建Spring容器,但是需要将配置文件的名称告诉它
• 将需要进行测试Bean直接在测试类中进行注入

3.2 Spring集成Junit步骤

① 导入spring集成Junit的坐标
② 使用@Runwith注解替换原来的运行期

使用@ContextConfiguration指定配置文件或配置类
④ 使用@Autowired注入需要测试的对象
⑤ 创建测试方法进行测试

你可能感兴趣的:(SSM,java,c++,开发语言)