发表于: 2018-05-19 23:09:47

1 1210


今天完成的事情:

service层编写 测试

service层也有接口和接口实现类

UserService接口

UserServiceImpl接口实现类

在service调用dao层调用实现方法,用bean将其实例化

有两种配置方法,这两种方法都需要@Autowired注解来注入property属性

@Autowired顾名思义,就是自动装配,其作用是为了消除Java代码里面的getter/setter与bean属性中的property。

第一种配置方法

只定义bean的id和class类,属性properties由@Autowired注解注入

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

class=...是让@Autowired注解可用


<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean id="service" class="com.fgh.Mybatis.service.UserServiceImpl"/>


也可以在applicationcontext配置文件中配置

<!--开启注解 -->
<context:annotation-config/>

上述语句的作用是隐式的向Spring容器注册                

AutowiredAnnotationBeanPostProcessor,                      

CommonAnnotationBeanPostProcessor,                          

PersistenceAnnotationBeanPostProcessor,                           

RequiredAnnotationBeanPostProcessor  

这4个BeanPostProcessor.注册这4个bean处理器主要的作用是为了你的系统能够识别相应的注解。   


第二种方式更为简单

简化了bean的配置,启用自动扫描(需要开启注解)使用@Service注解

<!--自动扫描机制,在类路径底下寻找标注@Component,@Service,@Controller,@Repository注解的类,
把这些类纳入进spring容器中管理。 base-package为需要扫描的包(含所有子包)-->
<context:component-scan base-package="com.fgh.Mybatis.service" />


@Service("service")
//    @Service服务层组件,用于标注业务层组件,表示定义一个bean,
//自动根据bean的类名实例化一个首写字母为小写的bean
//getBean的默认名称是类名(头字母小写),自定义@Service(“ ”)指定
public class UserServiceImpl implements UserService {


测试类

public class UserServiceTest {
private ApplicationContext applicationContext;

   private  UserService userService;
   @Before
   public void step()throws Exception{
applicationContext=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
       userService =(UserService)applicationContext.getBean("service");
   }

@Test
  public void testFinderUserById()throws Exception{
User user = userService.findUserById(9);
      System.out.println(user);
   }



明天计划的事情:

学习myBatis


遇到的问题:

不使用getBean手动获取bean对象

原先只有

@Autowired
   private  UserService userService;


正确配置

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class UserServiceTest {
@Autowired
   private  UserService userService;
//    private ApplicationContext applicationContext;
   @Before
  public void step()throws Exception{
//        applicationContext=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//        userService =(UserService)applicationContext.getBean("service");
}

@Test
  public void testFinderUserById()throws Exception{
User user = userService.findUserById(9);
      System.out.println(user);
   }


  • @RunWith 注释标签是 Junit 提供的,用来说明此测试类的运行者,这里用了 SpringJUnit4ClassRunner,这个类是一个针对 Junit 运行环境的自定义扩展,用来标准化在 Spring 环境中 Junit4.5 的测试用例,例如支持的注释标签的标准化

  • @ContextConfiguration 注释标签是 Spring test context 提供的,用来指定 Spring 配置信息的来源,支持指定 XML 文件位置或者 Spring 配置类名,这里我们指定 classpath 下的 spring配置文件的位置

    • @Autowired 体现了我们的测试类也是在 Spring 的容器中管理的,他可以获取容器的 bean 的注入,不用自己手工获取要测试的 bean 实例

    • 收获:

    • service层实现
    • @Autowired、@service作用
    • 测试类自动获得bean实例

返回列表 返回列表
评论

    分享到