30no2's Blog.

Spring黑马学习笔记四

字数统计: 924阅读时长: 4 min
2021/04/26 Share

打卡第四天。加油。。。。

第四天发现,复习完之前学的,啥也没做。。。。

1、Spring注解开发

1)Spring原始注解主要是替代< bean >的配置

注解 说明
@Component 使用在类上用于实例化Bean
@Controller 使用在web层类上用实例化Bean
@Service 使用在service层类上用于实例化Bean
@Repository 使用在dao层类上用于实例化Bean
@Autowired 使用在字段上用于根据类型依赖注入
@Qualifier 结合@Autowired一起使用用于根据名称进行依赖注入
@Resource 相当于@Autowired+@Qualifier,按照名称进行注入
@Value 注入普通属性
@Scope 注入Bean的作用范围
@PostConstruct 使用在方法上标注该方法时Bean的初始化方法
@PreDestroy 使用在方法上标注该方法时Bean的销毁方法
  • UserDaoImpl.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package com.wwq.dao;

    import org.springframework.stereotype.Component;

    // <bean id="userDao" class="com.wwq.dao.UserDaoImpl"/>
    @Component("userDao")
    public class UserDaoImpl implements UserDao {
    public void save() {
    System.out.println("save Running....");
    }
    }
  • UserServiceImpl.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    package com.wwq.service;

    import com.wwq.dao.UserDao;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Component;

    import javax.annotation.Resource;

    // <bean id="userService" class="com.wwq.service.UserServiceImpl">
    @Component("userService")
    public class UserServiceImpl implements UserService {
    // <property name="userDao" ref="userDao"/>
    //如果只按照类型注入则,只写@Autowired就行,如果需要按照名称注入则需要加上@Qualifier
    @Autowired
    @Qualifier("userDao")
    // 相当于@Autowired+Qualifier
    // @Resource
    private UserDao userDao;
    //xml方式必须要写set方法,注解方式可以省略
    //public void setUserDao(UserDao userDao){
    // this.userDao = userDao;
    //}
    public void save() {
    userDao.save();
    }
    }
  • applicationContext.xml

    1
    2
    <!--    配置组件扫描-->
    <context:component-scan base-package="com.wwq"/>

2)Spring的新注解

注释 说明
@Configuration 用于指定当前类是一个Spring配置类,当创建容器时会从该类上加载注释
@ComponentScan 用于指定Spring在初始化容器时要扫描的包。作用和在Spring的xml配置文件中的<context:component-scan base-package=”com.itheima”/>一样
@Bean 使用在方法上,标注将该方法的返回值存储至Spring容器中
@PropertySource 用于加载properties文件中的配置
@import 用于导入其他配置类

需要替换的注解包括:

  • 非定义的Bean的配置:< bean >
  • 加载properties文件的配置:< context:property-placeholder >
  • 组件扫描的配置:< context:component-scan >
  • 引入其他文件:< import >

  • SpringConfiguration.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package com.wwq.config;

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

    import java.beans.PropertyVetoException;

    //标志该类是Spring的核心配置文件
    @Configuration
    //<context:component-scan base-package="com.wwq"/>
    @ComponentScan("com.wwq")
    //<context:property-placeholder location="classpath:jdbc.properties"/>
    @PropertySource("classpath:jdbc.properties")
    @Import({DataSourceConfiguration.class})
    public class SpringConfiguration {
    }
  • DataSourceConfiguration.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    package com.wwq.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 java.beans.PropertyVetoException;

    //<context:property-placeholder location="classpath:jdbc.properties"/>
    @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 ComboPooledDataSource getDataSource() throws PropertyVetoException {

    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    dataSource.setDriverClass(driver);
    dataSource.setJdbcUrl(url);
    dataSource.setUser(username);
    dataSource.setPassword(password);
    return dataSource;
    }
    }
    • 测试代码(UserController.java)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package com.wwq.web;

    import com.wwq.config.SpringConfiguration;
    import com.wwq.service.UserService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;

    public class UserController {
    public static void main(String[] args) {
    //ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
    ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
    UserService userService = app.getBean(UserService.class);
    userService.save();
    }
    }

2、Spring整合Junit

1、Spring集成Junit步骤

  • 导入spring集成Junit的坐标
  • 使用@Runwith注解替换原来的运行期
  • 使用@ContextConfiguration指定配置文件或配置类
  • 使用@Autowired注入需要测试的对象
  • 创建测试方法进行测试
CATALOG
  1. 1. 1、Spring注解开发
    1. 1.1. 1)Spring原始注解主要是替代< bean >的配置
    2. 1.2. 2)Spring的新注解
  2. 2. 2、Spring整合Junit
    1. 2.1. 1、Spring集成Junit步骤