基于注解方式实现属性注入

@Autowired

根据属性类型进行自动装配


@Qualifier

根据属性名称进行注入


@Resourse

可以根据类型注入,也可以根据名称注入

@Value

注入普通类型属性

基于注解方式实现属性注入 @Autowired

第一步 把service和dao类创建,在service和dao添加创建对象注解

第二步 把service注入dao对象,在service类添加dao类型属性,在属性上面使用注解

package com.test4.service;

import com.test4.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

//在注解里面value属性值可以省略不写
//默认值是类名称,首字母小写
@Service
public class UserService {

    //定义dao类型属性
    //不需要添加set方法
    @Autowired
    private UserDao userDao;

    public void add(){
        System.out.println("userService add");
        userDao.add();
    }
}
package com.test4.dao;

public interface UserDao {

    void add();
}
package com.test4.dao;

import org.springframework.stereotype.Repository;

@Repository
public class UserDaoImpl implements UserDao {
    @Override
    public void add() {
        System.out.println("userDao  add");
    }
}
package com.test4.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import static org.junit.Assert.*;

public class UserServiceTest {

    @Test
    public void add() {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring12.xml");
        UserService userService = context.getBean("userService", UserService.class);
        System.out.println("userService = " + userService);
        userService.add();
    }
}

userService = com.test4.service.UserService@222114ba

userService add

userDao add

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--
    开启组件扫描
        如果要扫描多个包
            方法一 多个包之间使用逗号隔开
            方法二 扫描包的上层目录
    -->
    <!--<context:component-scan base-package="com.test4.dao,com.test4.service"/>-->
    <context:component-scan base-package="com.test4"/>

    <!--
    开启组件扫描配置 示例1
        use-default-filters="false" 表示现在不使用默认filter,使用自己配置的filter
        context:include-filter 扫描那些内容
    -->
    <!--<context:component-scan base-package="com.test4" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    &lt;!&ndash;
    开启组件扫描配置 示例2
        context:exclude-filter 不去扫描那些内容
    &ndash;&gt;
    <context:component-scan base-package="com.test4">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>-->
</beans>

基于注解方式实现属性注入 @Qualifier

@Qualifier注解的使用,和上面的@Autowired一起使用

当有多个同类型的对象时 需要添加@Qualifier注解

例如:

userDao有多个实现类 impl1 impl2.。。。

这种情况需要使用@Qualifier注解

package com.test4.dao;

import org.springframework.stereotype.Repository;

@Repository(value = "userDaoImpl")
public class UserDaoImpl implements UserDao {
    @Override
    public void add() {
        System.out.println("userDao  add");
    }
}
package com.test4.service;

import com.test4.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

//在注解里面value属性值可以省略不写
//默认值是类名称,首字母小写
@Service
public class UserService {

    //定义dao类型属性
    //不需要添加set方法
    @Autowired
    @Qualifier(value = "userDaoImpl")
    private UserDao userDao;

    public void add(){
        System.out.println("userService add");
        userDao.add();
    }
}


基于注解方式实现属性注入 @Resourse

package com.test4.service;

import com.test4.dao.UserDao;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

//在注解里面value属性值可以省略不写
//默认值是类名称,首字母小写
@Service
public class UserService {

    //定义dao类型属性
    //不需要添加set方法
   /* @Autowired
    @Qualifier(value = "userDaoImpl")*/
    //@Resource //默认情况下是根据类型注入
    //根据名称注入
    @Resource(name = "userDaoImpl")
    private UserDao userDao;

    public void add(){
        System.out.println("userService add");
        userDao.add();
    }
}

基于注解方式实现属性注入 @Value

package com.test4.service;

import com.test4.dao.UserDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

//在注解里面value属性值可以省略不写
//默认值是类名称,首字母小写
@Service
public class UserService {

    @Value(value = "名字")
    private String name;
    
    //定义dao类型属性
    //不需要添加set方法
   /* @Autowired
    @Qualifier(value = "userDaoImpl")*/
    //@Resource //默认情况下是根据类型注入
    //根据名称注入
    @Resource(name = "userDaoImpl")
    private UserDao userDao;

    public void add(){
        System.out.println("userService add");
        userDao.add();
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-11 13:34
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务