分层开发
文件列表
-
lib(jar)
com.springsource.org.apache.commons.logging-1.1.1.jar
spring-aop-4.2.4.RELEASE.jar
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
-
com.controller、com.dao、com.entity、com.service、com.test
applicationContext.xml、application-dao、application-service
<!--第一种方式:分布式-->
<import resource="application-dao.xml"></import>
<import resource="application-service.xml"></import>
<bean id="userServlet" class="com.controller.UserServlet">
<property name="us" ref="userService"></property>
</bean>
<!--第二种方式:扫描 解析注解-->
<!--通知Spring扫描指定包,进行注解解析-->
<context:component-scan base-package="com"></context:component-scan>
注解形式
- @Repository:存储层Bean(Dao)
- @Service:业务层Bean(Service)
- @Controller:展示层Bean(Controller/Servlet)
- 使用@Repository将Dao类声明为Bean
@Repository("mysql")//加上括号,便于区分
public class UserDaoImpl implements UserDao{
@Override
public User login() {
System.out.println("执行sql语句");
return null;
}
}
- Service实现类使用@Service注解
public class UserServiceImpl implements UserService{
//@Autowired
@Resource(name = "mysql")
private UserDao dao;
//public UserDao dao = new UserDaoImpl();
@Override
public User login() {
return dao.login();
}
public UserDao getDao() {
return dao;
}
public void setDao(UserDao dao) {
this.dao = dao;
}
}
- Controller层使用@Controller注解
@Controller
@Scope("prototype")
public class UserServlet {
@Autowired
private UserService us;
public void login(){
us.login();
}
public UserService getUs() {
return us;
}
public void setUs(UserService us) {
this.us = us;
}
}
@Autowired
- @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
<!--通知Spring扫描指定包,进行注解解析-->
<context:component-scan base-package="com"></context:component-scan>
@Controller
@Scope("prototype")//多例
public class UserServlet {
@Autowired
private UserService us;
public void login(){
us.login();
}
public UserService getUs() {
return us;
}
public void setUs(UserService us) {
this.us = us;
}
}
-
在使用@Autowired时,首先在容器中查询对应类型的bean
如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据
如果查询的结果不止一个,那么@Autowired会根据名称来查找。
如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false