Spring IoC 容器配置(半注解方式 )
半注解半xml配置的开发方式
把<bean> 属性注入<property>,使用注解方式的替换
替换bean的注解:
- @Component, 标记在类上, 表示把这个类,交给Spring管理, 除dao,service,web层之外的类
- @Repository 用于注册DAO(持久层 )
- @Service 用于注册 Service(业务层)
- @Controller 用于注册 Action (web层), Servlet 不能使用
1、@Component
//entity类,或者三层之外的 @Component("student")
2、@Repository
//userDaoImpl使用 @Repository("userDao")
3、@Service
//userServiceImpl使用 @Service("userService")
Spring默认不去扫描类上的注解, 在xml文件中, 配置扫描注解,属性context的命名空间的标签, spring的配置文件上,添加context命名空间头部
<!--使用以context为前缀的标签 --> xmlns:context="http://www.springframework.org/schema/context" ... http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd <!-- 扫描注解 base-package: 包名, 扫描这个包,以及这个包后代包下所有类上的注解 --> <context:component-scan base-package="spring" /> <!-- 如果有多个包,用逗号隔开--> <context:component-scan base-package="x.y.z.service, x.y.z.controller" />
属性注入的注解:
普通属性: 基本数据,String类型
@Value(“值”) : //把这个值直接赋值给属性 @Value(“${properties文件的name值}”) //读取某个Properties文件, 把这个文件的name的值赋值给属性
javaBean属性的注入 使用注解注入, 省略set方法
1) @Value(“#{beanId}”) 不推荐
2) @Autowired 按照类型查找注入的bean
结合 @Qualifier(beanId) 注解, 根据id查找bean
@Autowired //根据类型 推荐使用 @Qualifier("queryRunner") //根据id
3) @Resource 在Spring早期版本使用的
@Resource //不写name按类型 @Resource(name="userDao") //根据id
4、 JSR-330规范 提供 @Inject @Named 注解
必须 导入 javax.inject jar包
@Inject //根据类型 @Named("userDao") //根据id private IUserDao userDao;
实现代码:
userDaoImpl层:
//使用注解,将userDaoImpl交给spring容器,beanid 为userDao @Repository("userDao") public class UserDaoImpl implements IUserDao { //将userDao注入到UserDaoImpl中 //使用 @Autowired 注解 结合 @Qualifier 注解 @Autowired //根据类型 推荐使用 @Qualifier("queryRunner") //根据id private QueryRunner runner;
userServiceImpl层:
@Service("userService") public class UserServiceImpl implements IUserService { //使用@Resource 注解实现注入 ,不写name按类型 //@Resource(name="userDao") //使用 @Inject @Named 注解 //必须 导入 javax.inject jar包 @Inject @Named("userDao") private IUserDao userDao;
applicationContext.xml (根据Dbutils工具类实现和spring的整合使用)
<!-- 带连接池的数据源: c3p0 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 通过set方法赋值 --> <property name="driverClass" value="oracle.jdbc.OracleDriver"/> <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <property name="user" value="yosebook"/> <property name="password" value="123"/> </bean> <!-- 给Dbutils工具类,注入添加数据源 --> <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype"> <!-- 通过有参构造方法 --> <constructor-arg name="ds" ref="dataSource"/> </bean> <!-- 配置全局加载配置文件 --> <context:component-scan base-package="com.zl.spring"/>