Spring(五):基于xml和注解的自动装配

        之前写漏了基于xml的自动装配,就单独拿出来写一下。

1.基于xml的自动装配

1.1 自动装配

        根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值.

1.2 创建类

创建UserController类

   public class UserController {
        private UserService userService;

        public void setUserService(UserService userService) {
            this.userService = userService;
        }

        public void saveUser() {
            userService.saveUser();
        }
    }

创建接口UserService

public interface UserService {
void saveUser();
}

创建UserService的实现类

public class UserServiceImpl implements UserService { 
	private UserDao userDao; 
	public void setUserDao(UserDao userDao) {
	this.userDao = userDao; 
	}
	@Override 
	public void saveUser() { 
	userDao.saveUser(); 
	} 
}

创建接口UserDao

public interface UserDao { 
void saveUser();
}

创建UserDao接口的实现类

public class UserDaoImpl implements UserDao {
        @Override
        public void saveUser() {
            System.out.println("保存成功");
        }
    }

1.3 配置bean

使用bean标签的autowire属性设置自动装配效果

自动根据类中的类类型或接口类型的属性自动为其匹配对应的bean赋值

自动装配方式:byType

byType:根据类型匹配IOC容器中的某个兼容类型的bean,为属性自动赋值

自动装配方式:byName

byName:将自动装配的属性的属性名,作为bean的id在IOC容器中匹配相对应的bean进行赋值

如userService里是userDao属性,则匹配的bean的id应该是userDao

若在IOC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,即值为默认值null

<!--
自动装配:根据指定策略,在IOC容器中匹配某个bean,自动为bean中的类类型的属性或者接口类型的属性赋值
通过bean标签中的autowire属性设置自动装配策略
no,default表示不装配
byType:根据要赋值的属性的类型,在IOC容器中匹配某个bean,为属性赋值
byName:将要赋值的属性的属性名作为bean的id在IOC容器中匹配某个bean,为属性赋值
    -->
    <bean id="userController" class="com.xiaoye.controller.UserController" autowire="byType">
<!--        <property name="userService" ref="userService"></property>-->
    </bean>

    <bean id="userDao" class="com.xiaoye.dao.impl.UserDaoImpl"></bean>

    <bean id="userService" class="com.xiaoye.service.impl.UserServiceImpl" autowire="byName">
    </bean>

 

 5. 基于注解的自动装配

5.1 @Autowired注解

在成员变量上直接标记@Autowired注解即可完成自动装配,不需要提供setXxx()方法。

@Controller
public class UserController {
    //@Qualifier("userSeriverImpl")
    @Autowired
    private UserService userService;
    public void saveUser(){
        userService.saveUser();
    }
}


@Autowired:实现自动装配功能的注解
* 1.@Autowired注解标识位置:
* a>标识在成员变量,此时不需要设置成员变量的set方法
* b>标识在set方法上
* c>为当前成员变量的赋值的有参构造
@Autowired注解原理:
* a>默认通过byType方式,在IOC容器中通过类型匹配某个bean为属性赋值
* b>若有多个类型匹配的bean,此时会自动转换为byName的方式来实现自动装配的效果

* c>若byType和byName都不无法实现自动装配,会抛出异常
* d>此时可以在要赋值的属性上添加一个注解 @Qualifier
* 通过该注解的value的属性值,来指定一个bean的id,将这个bane为属性赋值
* 在@Autowired注解中有一个属性required,默认值是ture,要求必须完成自动装配
* 可以将required设置为false,即可装配就装配,无法装配就用属性默认值

 图解:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值