• 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"/>
  • 相关阅读:
    sqhhb
    12333
    12

    今日份
    12
    彻底理解 Cookie、Session、Token
    https原理
    12312
    uiower
  • 原文地址:https://www.cnblogs.com/64Byte/p/13088422.html
Copyright © 2020-2023  润新知