使用注解标识组件
- 普通组件:@Component
标识一个受Spring IOC容器管理的组件 - 持久化层组件:@Repository
标识一个受Spring IOC容器管理的持久化层组件 - 业务逻辑层组件:@Service
标识一个受Spring IOC容器管理的业务逻辑层组件 - 表述层控制器组件:@Controller
标识一个受Spring IOC容器管理的表述层控制器组件 - 组件命名规则
①默认情况:使用组件的简单类名首字母小写后得到的字符串作为bean的id
②使用组件注解的value属性指定bean的id
注意:事实上Spring并没有能力识别一个组件到底是不是它所标记的类型,即使将 @Respository注解用在一个表述层控制器组件上面也不会产生任何错误,所以 @Respository、@Service、@Controller这几个注解仅仅是为了让开发人员自己明确 当前的组件扮演的角色。
组件被上述注解标识后还需要通过Spring进行扫描才能够侦测到。
扫描组件:
-
指定被扫描的package
<context:component-scan base-package=" "/> -
详细说明
①base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包及其子包中的所有类。
②当需要扫描多个包时可以使用逗号分隔。
③如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类
④包含与排除
●context:include-filter子节点表示要包含的目标类
注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些 组件”这样的效果。即:通过将use-default-filters属性设置为false, 禁用默认过滤器,然后扫描的就只是include-filter中的规则指定的 组件了。
●context:exclude-filter子节点表示要排除在外的目标类
●component-scan下可以拥有若干个include-filter和exclude-filter子节点
user.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.spring">
</context:component-scan>
</beans>
UserController.java
package com.spring.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.spring.service.UserServiceImpI;
@Controller
//@Controller(value="aa"),value属性指定生成的bean的id
public class UserController {
@Autowired
private UserServiceImpI userserviceimpi;
public void adduser() {
userserviceimpi.adduser();
}
public UserController() {
System.out.println("UserController");
}
}
UserDao.java
package com.spring.dao;
public interface UserDao {
void adduser();
}
UserDaoImpI.java
package com.spring.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpI implements UserDao{
public UserDaoImpI() {
System.out.println("UserDaoImpI");
}
@Override
public void adduser() {
// TODO Auto-generated method stub
System.out.println("1:添加成功");
}
}
UserDaoImpI2.java
package com.spring.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpI2 implements UserDao{
@Override
public void adduser() {
// TODO Auto-generated method stub
System.out.println("2:添加成功");
}
}
UserService.java
package com.spring.service;
public interface UserService {
void adduser();
}
UserServiceImpI.java
package com.spring.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.spring.dao.UserDao;
@Service
public class UserServiceImpI implements UserService{
public UserServiceImpI() {
System.out.println("UserServiceImpI");
}
@Autowired
@Qualifier(value="userDaoImpI2")
private UserDao userdao;
public void adduser() {
userdao.adduser();
}
}
test.java
package com.spring.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.controller.UserController;
import com.spring.dao.UserDaoImpI;
import com.spring.service.UserServiceImpI;
public class test {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("user.xml");
UserController uc=ac.getBean("userController",UserController.class);
// System.out.println(uc);
// UserServiceImpI us=ac.getBean("userServiceImpI",UserServiceImpI.class);
// System.out.println(us);
// UserDaoImpI ud=ac.getBean("userDaoImpI",UserDaoImpI.class);
// System.out.println(ud);
uc.adduser();
}
}