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

@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();
    }
}
全部评论

相关推荐

oppo 应用软开 22*15+0.5*12
拿到了ssp完美:真的坎坷,但是你至少拿到这么多offer了!
点赞 评论 收藏
分享
10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务