复习Spring第二课

3)自动装配
在这里插入图片描述
属性自动装配
autowire关键字

<bean id="person" class="com.haina.spring.Person">
    <property name="name" value="张三"/>
</bean>
<!-- 属性自动装配,会自动的把上面定义好的person类型的bean,装配到,改bean的person类型属性中
        person 是 helloword类里卖弄的一个属性
    -->
    <bean id="helloAuto" class="com.haina.spring.HelloWorld" autowire="byType"/>

名称自动装配

private Person p;
<!--    根据名称自动装配 bean 的名字要与被装配的属性名相同,否则无法自动装配-->
<bean id="p" class="com.haina.spring.Person">
    <property name="name" value="abc"/>
</bean>
<bean id="helloAuto" class="com.haina.spring.HelloWorld" autowire="byName"/>

组件装配,注解
注解和配置文件时可以共存的,但是同一个类不可以

<!--    自动扫描,后面的属性是需要扫描的包路径-->
    <context:component-scan base-package="com.haina.spring"/>

@Service 给类实例化出来一个对象
常用的注解
在这里插入图片描述
持久层,dao
controller,相当于Servlet
@Service,@Component ,@Repository功能上相同

// 给类加上注解,spring初始化的时候,会扫描对应的包,检测这个包下所有带有特定
//注解的类,spring会对这些类进行管理,对列进行实例化
//相当于在xml中写了一个bean,创建UserService对象
//service标注的类,会自动的给该类创建一个bean, 然后命名的格式就是该类的类名,首字母小写
//我们也可以给该类自定义bean的id, 方(@Service("Us"), 这样写us就是该bean的id 1

@Service
//@Component
//@Repository
public class UserService {
// 注入值
//    value注解的作用就是把注解内的值赋到属性上
//  @value 从配置文件中读取数据然后赋值给属性
//    读取配置文件中的数据的方式,使用${}大括号里面写对应数据的名称
    @Value("${dbusername}")
    private String str;

    //Autowired注解根据类型自动匹配,如果没有该类型对象,会找该类型的子类对象或者实现类对象
//    在使用Autowired的时候,需要注意,当一个类型哟多个bean的时候,默认情况下会报错
//    要是有多个bean用Qualifier指定
    @Autowired //使用类型进行自动装配,找到对应的对象
    @Qualifier("userOracleDao")//两个类都继承实现dao,手动选择
    private Dao dao;

    //Resource 注解默认根据名称来查找对应的bean, 名称默认是属性的名字,如果通过属性的名字在容器中找到J
    //对应的bean, 则会注入成功,如果找不到,则会降级为根据类型来匹配,如果根据类型匹配可以找到唯- -的一 个
    //bean, 则同样可以注入成功,如果找到了多个则会报错,需要我们进一 步的处理

    @Resource//用的多
    private Dao userDao;//userDao.queryUser(),Resource注解默认的属性,根据名称查找,UserDao 默认是这个属性名

    @Resource(name="userDao",type = UserDao.class)//该注解还可以直接指定type, type 的值是class类型的,如果指定了type,则只能通过类型查找
    //如果name和type同时存在,则会根据两者找到唯- -匹配的那个对象,找不到则会报键
    private Dao p;//名字不是类名,Dao下面有多个实现类,可以用resource里面指定那个类

    @Resource
    private Date date;//jdk自带的日期类
    public void getUserName(){
        System.out.println("abcde"+str);
        System.out.println(date);
        dao.queryUser();
        userDao.queryUser();
        p.queryUser();
    }

resource注解和autowired注解的区别:
1.autowired注解只能按照类型注入, resource注解默认是按照name注入的,也可以按照类型注入,取决于我们参数的设置,并且它也可以做到自动切换
2.autowired注解按类型注入对象,默认情况下要求依赖的那个对象必须存在,如果想要允许依赖的对象为null,则需要设置他的required属性为false。 如果我们想要使用按名称进行装配,则需要结合Qualifier注解一起使用才行。相对来说比较麻烦
resource注解有两个属性,name和type, name属性指定依赖的bean的名字,如果没有指定name属性,则默认取该注解标注的那个属性的名字。 当我们设置了type属性的时候,则会直接根据类型进行匹配
推荐使用resource注解
javax.annotation.Resource;
org.springframework.beans.factory annotation.Autowired
resource注解是属于java的,autowired注解 是spring提供的.使用resource注解可以减少项目spring的耦合
自定义的类,我们可以在类上加注解,交给spring去管理
那么jdk
自带的,是否可以交给spring去帮我们管理呢?
通过bean的方式可以帮我们管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值