1. 程式人生 > 其它 >Spring基於註解方式實現屬性注入(超詳細)

Spring基於註解方式實現屬性注入(超詳細)

技術標籤:Spring5spring

基於註解方式實現屬性注入

註解說明
@AutoWired根據屬性型別自動裝配
@Qualifier根據屬性的名稱注入要和@AutoWired一起使用
@Resource可以根據型別輸入也可以根據名稱注入
@Value注入普通型別屬性

上面的三種是注入物件的,@Value是注入普通型別屬性的(如String)。

首先需要開啟開啟元件掃描

bean1.xml:

<?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.Keafmd"></context:component-scan> </beans>

注入物件型別屬性

需求:我們通過註解的方式在UserService呼叫UserDaoImpl的方法。

第一步:把service和dao物件建立,在service和dao類新增建立物件的註解。
第二步:在service注入dao物件。

UserDao介面:

package com.Keafmd.spring5.
dao; /** * Keafmd * * @ClassName: UserDao * @Description: * @author: 牛哄哄的柯南 * @date: 2021-01-17 15:39 */ public interface UserDao { public void add(); }

UserDaoImpl實現類:

package com.Keafmd.spring5.dao;

import org.springframework.stereotype.Repository;

/**
 * Keafmd
 *
 * @ClassName: UserDaoImpl
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-17 15:39
 */
@Repository("userDaoImpl01")
public class UserDaoImpl implements UserDao{
    @Override
    public void add() {
        System.out.println("dao add ...");
    }
}

UserService類:

package com.Keafmd.spring5.service;

import com.Keafmd.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Keafmd
 *
 * @ClassName: UserService
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-17 13:15
 */
//在註解裡的value值可以不寫,預設就是類的首字母小寫 userService
// @Component(value = "userService")  //<bean id="userService" class=".."/>

@Service
public class UserService {

    //定義dao型別屬性 ,不需要新增set方法了
    //添加註入屬性的註解
   /* @Autowired
    @Qualifier(value = "userDaoImpl01")  // 要和@AutoWired一起使用 ,填寫value值是為了解決有多個實現類,根據型別的話就沒法區分
    private UserDao userDao;*/

//    @Resource  //根據型別注入
    @Resource(name = "userDaoImpl01")  // 根據名稱注入
    private UserDao userDao;

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

測試類:

package com.Keafmd.spring5.testdemo;

import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Keafmd
 *
 * @ClassName: TestSpring5Demo1
 * @Description: 測試類
 * @author: 牛哄哄的柯南
 * @date: 2021-01-17 13:03
 */
public class TestSpring5Demo1 {
    @Test
    public void testService(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userService",UserService.class);
        System.out.println(userService);
        userService.add();
    }
}

測試結果:

com.Keafmd.spring5.service.UserService@7ea37dbf
service add......
dao add ...

Process finished with exit code 0

service和dao中的內容都輸出了,證明基於註解方式實現物件屬性的注入就成功了。

注入普通型別屬性

修改UserService類,新增一個String型別的屬性,並使用@Value註解對普通型別的屬性進行注入,在新增一個輸出語句方便測試。

UserService類:

package com.Keafmd.spring5.service;

import com.Keafmd.spring5.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Keafmd
 *
 * @ClassName: UserService
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-17 13:15
 */
//在註解裡的value值可以不寫,預設就是類的首字母小寫 userService
// @Component(value = "userService")  //<bean id="userService" class=".."/>

@Service
public class UserService {

    @Value(value = "Keafmd")
    private String name;

    //定義dao型別屬性 ,不需要新增set方法了
    //添加註入屬性的註解
   /* @Autowired
    @Qualifier(value = "userDaoImpl01")  // 要和@AutoWired一起使用 ,填寫value值是為了解決有多個實現類,根據型別的話就沒法區分
    private UserDao userDao;*/

//    @Resource  //根據型別注入
    @Resource(name = "userDaoImpl01")  // 根據名稱注入
    private UserDao userDao;

    public void add(){
        System.out.println("name:"+name);
        System.out.println("service add......");
        userDao.add();
    }
}

其他類和測試類不變。
測試結果:

com.Keafmd.spring5.service.UserService@7ea37dbf
name:Keafmd
service add......
dao add ...

Process finished with exit code 0

輸出了Keafmd就證明成功的使用註解的方式注入了name屬性。

以上就完成了基於註解方式實現屬性注入。

看完如果對你有幫助,感謝點贊支援!
如果你是電腦端的話,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

在這裡插入圖片描述

加油!

共同努力!

Keafmd