首頁 >Java >java教程 >Java之Spring簡單讀取和儲存物件的方法是什麼

Java之Spring簡單讀取和儲存物件的方法是什麼

PHPz
PHPz轉載
2023-04-19 10:07:021488瀏覽

Spring 簡單的讀取和儲存物件

取得Bean 物件(物件組裝)

取得bean 物件也叫做物件裝配,是把物件取出來放到某個類中,有時候也叫對象註⼊。

物件組裝(物件注入)的實作方法以下3 種:

  • #屬性注入

  • 建構方法注入

  • Setter 注入

我們先建立以下幾個套件和幾個類別:

Java之Spring簡單讀取和儲存物件的方法是什麼

屬性注入

屬性註⼊是使⽤ @Autowired 實現的,將Service 類別註⼊到 Controller 類別中.

@Controller
public class StudentController {
    // 1.使用属性注入的方式获取 Bean
    @Autowired
    private StudentService studentService;

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}

優點:

實作簡單, 使用簡單.

# 缺點:

  • ##功能性問題: 不能注入不可變(

    final) 物件.

Java之Spring簡單讀取和儲存物件的方法是什麼

#在Java 中final 物件(不可變)要嘛直接賦值,要嘛在構造方法中賦值,所以當使用屬性注入final 物件時,它不符合Java 中final 的使用規範,所以就不能注入成功了。

  • 通用性問題: 只能適應於 

    IoC 容器.

  • 設計原則問題: 更容易違反單一設計原則. (針對物件是類別)

單一設計原則:

  • 針對於類別層級

  • 針對於方法層級

建構方法注入
從 

Spring 4.x 之後, Spring 官方建議使用建構方法注入的形式.

@Controller
public class StudentController {
    // 2.构造方法注入
    private StudentService studentService;
    
    // @Autowired 可省略
	@Autowired
    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}

# 注意

  • ##@Autowired可省略.

  • 但是如果類別中有多個建構⽅法,那麼需要加入 

    @Autowired 來明確指定到底使⽤哪個建構⽅法,否則程序會報錯.

優點:

  • #可注入不可變物件.

Java之Spring簡單讀取和儲存物件的方法是什麼

  • 注入物件不會被修改.

    • 加上了 

      final 修飾符.

    • 建構方法是隨著類別載入只執行一次的.

  • #注入物件會被完全初始化。(使用建構方法帶來的優點)

  • 通用性更好.

  • ##沒有屬性注入實作簡單.
  • Setter 注入

Setter

 注⼊和屬性的Setter ⽅法實作類似,只不過在設定set ⽅法的時候需要加上@Autowired 註解.

@Controller
public class StudentController {
    // 3.setter 注入
    private StudentService studentService;

    @Autowired
    public void setStudentService(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}

Java之Spring簡單讀取和儲存物件的方法是什麼優點:

更符合單一設計原則. (針對物件是方法層級)

  • #缺點:

  • 不能注入不可變物件(
  • final
 修飾的物件).

##注入的物件可被修改.

Java之Spring簡單讀取和儲存物件的方法是什麼

set

 方法是普通set 方法, 可以被重複呼叫, 有被修改的風險.

小結: 日常開發當中, 使用屬性注入實作更簡單的讀取Bean, 還是主流的實作方式.
  • @Resource 關鍵字

    在進⾏類別註⼊時,除了可以使⽤ @Autowired 關鍵字之外,我們還可以使⽤ @Resource 進⾏注⼊.
  • @Controller
    public class StudentController {
        @Resource 
        private StudentService studentService;
    
        public void sayHi() {
            // 调用 service 方法
            studentService.sayHi();
        }
    }

    @Autowired和@Resource 的區別相同點: 都是用來實現依賴注入的.

    ###不同點:############功能支援不同: @Autowired支援屬性注入, setter 注入, 建構方法注入; @Resource 只支援屬性注入和setter 注入, 不支援建構方法注入.############出身不同: @Autowired 來自於Spring 框架; 而@Resource 來自於JDK.############參數支援不同: @Resource 支援更多的參數設定; 而 @Autowired 只支援required 參數.############ #同⼀類型多個@Bean 報錯處理######當出現以下多個Bean,傳回同⼀物件類型時程式會報錯##############此時我們運行:###
    public class App {
        public static void main(String[] args) {
            ApplicationContext applicationContext =
                    new ClassPathXmlApplicationContext("spring-config.xml");
            StudentController studentController =
                    applicationContext.getBean("studentController", StudentController.class);
            studentController.func();
        }
    }
    #### 注意# 會報錯, 報錯的原因是,非唯一的Bean 物件。 ######同⼀類型多個Bean 報錯處理######解決同⼀個類型,多個Bean 的解⽅案有以下兩個:############使⽤ ###@Resource(name="student1")### 定義.############使⽤ ###@Qualifier###註解定義名稱.###

# 使⽤ @Resource(name="student1") 定义.

@Controller
public class StudentController {
    
    @Resource(name = "student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}

# 使⽤ @Qualifier 注解定义名称.

@Controller
public class StudentController {
    
    @Resource
    @Qualifier("student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}

# 如果我们想用 @Autowired 可以写成:

@Autowired 
private Student student1;
// 存在有耦合性问题

以上是Java之Spring簡單讀取和儲存物件的方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除