侧边栏壁纸
  • 累计撰写 2,046 篇文章
  • 累计创建 73 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

(四)Spring注解开发----Spring简明快速入门学习

大猿本猿
2021-10-17 / 330 阅读 / 0 字

Spring原始注解

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
Spring原始注解主要是替代<Bean>的配置

注解标志

使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
   <!--启动注解驱动,指定对应扫描的路径,也就是资源所在的包-->
    <context:component-scan base-package="com.itheima"/>

案例代码

代码

dao层
package com.itheima.dao.impl;

import com.itheima.dao.UserDao;
import com.itheima.service.impl.UserServiceImpl;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;

@Repository("userDao")
@DependsOn("userService")

public class UserDaoImpl implements UserDao {

    public UserDaoImpl(){
        System.out.println("dao running....");
    }

    public void save() {
        System.out.println("user dao running...1");
    }
}
service层
package com.itheima.service.impl;

import com.itheima.dao.BookDao;
import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
//定义bean,后面添加bean的id
@Component("userService")
//设定bean的作用域
@Scope("singleton")
public class UserServiceImpl implements UserService {

    @Value("4")
    private int num ;
    @Value("itheima")
    private String version;
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
    @Autowired
    private BookDao bookDao;

    public UserServiceImpl(){
        System.out.println("service running....");
    }


//    public void setNum(int num) {
//        this.num = num;
//    }
//
//    public void setVersion(String version) {
//        this.version = version;
//    }

    public void save() {
        System.out.println("user service running..." +num+" "+version);
        userDao.save();
        bookDao.save();
    }
    //设定bean的生命周期
    @PreDestroy
    public void destroy(){
        System.out.println("user service destroy...");
    }
    //设定bean的生命周期
    @PostConstruct
    public void init(){
        System.out.println("user service init...");
    }

}

关于@Qualifier:

关于QResource

@Resource相当于@Qualifier+@Autowired

Spring的新注解

使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下:
  • 非自定义的Bean的配置: <bean>
  • 加载properties文件的配置:<contextproperty-placeholder>
  • 组件扫描的配置:<context:component-scan>
  • <import>
第三方资源的配置类

Spring整合Junit

原始Junit测试Spring的问题

在测试类中,每个测试方法都有以下两行代码:
Applicationcontext ac = new classPathXmlApplicationcontext ( "bean.xm1");
IAccountservice as = ac.getBean ( "accountservice",IAccountservice.class);
这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。

问题解决思路

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

Spring集成Junit的步骤

  • 导入spring集成Junit的坐标
  • 使用@Runwith注解替换原来的运行期
  • 使用contextconfiguration指定配置文件或配置类使用@Autowired注入需要测试的对象
  • 创建测试方法进行测试