Spring学习(九)使用ioc注解方式配置bean

context层 :

上下文环境/容器环境 applicationContext.xml


1 ioc注解功能

    注解 简化xml文件配置  如 hibernate 映射文件

    ioc注解 简化 ioc容器的配置 
        1 bean对象定义过程
            @Component
                该注解用于标注一个类
                标注哪些需要使用ioc管理/实例化的类
                被标注的类会成为ioc实例化的对象
                ioc容器解析时,会在工程中扫描所有被该注解标注的类,使用ioc方式对其进行实例化。

            @Controller  用于标注业务逻辑对象  xxServlet xxAction xxController
            @Service  用于标注服务类型对象  xxService xxServiceImpl
            @Repository  用于标注持久化对象 xxDao xxDaoImpl

            这三个注解的使用方式和作用效果与@Component一模一样

            为了程序开发的规范性,尽量什么类型的对象就使用什么注解进行标注。

        2 bean之间的注入过程

            @Autowired  自动装载。该注解用于标注目标对象中的一个属性,根据被标注属性的属性名和属性类型在ioc容器中查找匹配的bean,从而得到需要的bean对象。
具体示例:
现在ioc容器中添加context层支持:
包括添加xmlns:context、xsi:schema、注解扫描地址

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <!-- 
        ioc注解功能 ~ context层
            导入context层对应的命名空间和schame文件
        如果包结构太多,直接扫描com
     -->
    <context:component-scan base-package="com.etoak.action,com.etoak.dao"></context:component-scan>

</beans>

LoginAction.Java:
这里面注意@Component中的参数la可以写也可以不写,写上了就指定了bean对象的id值,默认为类名开头字母小写loginAction.

@Component("la")   // <bean id="la" class="xx.LoginAction"/>
public class LoginAction {

    @Autowired
    private UserDaoImpl ud;
    /**
     * 首先根据被标注属性的属性名'ud'
     * 在ioc容器中查找一个 id="ud" 的bean进行注入
     * 再根据被标注属性的属性类型 'UserDaoImpl'
     * 在ioc容器中查找一个 class="UserDaoImpl" 的bean进行注入
     * @return
     */


    public String execute() {
        System.out.println("处理客户端提交的login.action请求");
        ud.login();
        return "success";
    }
}

UserDaoImpl.java

@Component     // <bean id="userDaoImpl" class="xx.UserDaoImpl"/>
public class UserDaoImpl {

    public boolean login(){
        System.out.println("连接数据库判断登录是否成功");
        return true;
    }

测试类:

public class Test {

    public static void main(String[] args) {

        ApplicationContext ac = new 
            ClassPathXmlApplicationContext("applicationContext.xml");

        /**
         * 1 在使用注解方式实例化bean对象时
         * 由于没有为其设置具体的ID值
         */
        LoginAction la = ac.getBean(LoginAction.class);

        /**
         * 2 虽然没有手动为其设置ID值
         * 但是注解会自动为其提供一个ID值
         *      类名 首字母小写  
         */
        UserDaoImpl ud = 
                (UserDaoImpl)ac.getBean("userDaoImpl");

        /**
         * 3 手动为其设置一个ID值
         */
        LoginAction la2 = (LoginAction)ac.getBean("la");
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值