发表于: 2018-05-19 23:09:47
1 1203
今天完成的事情:
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实例
评论