spring的三层架构:controller,service ,dao,我们在编写代码的过程中应该是这样的,在controller层注入service的实现类,不能注入接口,在service层注入dao层的实现类,创建配置文件,通过ioc容器获取对应的bean.
这是项目结构
UserController中的代码
package com.atguigu.spring.controller;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
}
UserDaoImpl中的代码
package com.atguigu.spring.dao.impl;
import com.atguigu.spring.dao.UserDao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao {
}
UserDao中的代码
package com.atguigu.spring.dao;
public interface UserDao {
}
UserServiceimpl 中的代码
package com.atguigu.spring.service.impl;
import com.atguigu.spring.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceimpl implements UserService {
}
UserService中的代码
package com.atguigu.spring.service;
public interface UserService {
}
要想使用注解进行扫描,一定要在对应的位置加上注解,这是spring的xml配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
<!--扫描组件-->
<context:component-scan base-package="com.atguigu.spring">
<!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>-->
<!-- <context:exclude-filter type="assignable" expression="com.atguigu.spring.controller.UserController"/>-->
<!--根据注解排除一些不扫描的包,type="annotation-->
<!-- 根据类的类型进行排除一些不扫描的包, -->
</context:component-scan>
</beans>
这是测试文件
package com.atguigu.spring;
import com.atguigu.spring.controller.UserController;
import com.atguigu.spring.dao.UserDao;
import com.atguigu.spring.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class IOCByAnnotationTest {
/*
*@Component:将类标识为普通组件
*@Controller:将类标识为控制层组件
* @Service:将类标识为业务层组件
* @Reposity:将类标识为持久层组件
*
* */
@Test
public void test(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc-annotation.xml");
// UserController userController= ioc.getBean(UserController.class);
// System.out.println(userController);
UserService userService= ioc.getBean(UserService.class);
System.out.println(userService);
UserDao userDao = ioc.getBean(UserDao.class);
System.out.println(userDao);
}
}