Spring IoC 容器配置(半注解方式 )

Posted 64Byte

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"/>

 

以上是关于Spring IoC 容器配置(半注解方式 )的主要内容,如果未能解决你的问题,请参考以下文章

Spring IoC 容器配置(全注解方式 )

Spring框架学习使用ioc注解方式配置bean

Spring IOC容器

[Spring5]IOC容器_Bean管理注解方式_完全注解开发

IOC容器-Bean管理注解方式

[Spring5]IOC容器_Bean管理注解方式_组件扫描配置细节