Spring更簡單的存儲方式與獲取方式詳解

存儲方式(註解)

使用註解的方式存儲業務對象到Spring中會更簡單

1.配置spring.xml設置spring存入對象的根路徑 ,目的是讓Spring項目啟動後,能夠去根路徑下的所有類中掃描並標識為需要存儲到Spring中的對象存儲到Spring中

<?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:content="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 https://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 配置一下:bean註解掃描的根路徑(方面後面更簡單存儲對象到spring容器)-->
    <content:component-scan base-package="com.bit"></content:component-scan>
</beans>

2.使用註解將bean對象存儲到spring框架中

註解分類:

1.類註解:@Controller【控制器】,@Service【業務邏輯層】,@Repository【數據持久層】,@Component【組件類】,@Configuration【配置類】

2.方法註解:@Bean(必須配合類註解使用)

@Controller

創建bean對象

package com.bit;

import org.springframework.stereotype.Controller;

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 19:23
 */
@Controller
public class UserController {
    public void sayHi(String name){
        System.out.println("Hi controller"+name);
    }
}

讀取bean對象

package com.bit;

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

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 15:25
 */
public class App {
    public static void main(String[] args) {
        //先獲取對象的Spring
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        //從 Spring 中獲得存入的對象(將存入的類首字母小寫,若類名字符大於2個,並且前兩個字符都是大寫,那麼使用原類名作為bean的名字)
        UserController userController = context.getBean("userController",UserController.class);
        userController.sayHi("Bit");
    }
}

@Service

和controller一樣

@Repository

和controller一樣

@Configuration

和controller一樣

@Component

和controller一樣

方法註解@Bean

一般寫在組件裡面,方法註解必須配合類註解使用,因為Spring默認是類級別的掃描

package com.bit.util;

import com.bit.Model.User;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 21:14
 */
@Component
public class UserBean {
    @Bean //將當前對象存儲在Spring當中
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setAge(18);
        return user;
    }
}

重命名bean

可以通過設置name屬性給Bean對象進行重命名操作

@Bean重命名可以有多個別名,但是當指定別名之後,方法名就取不到對象瞭

package com.bit.util;

import com.bit.Model.User;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * Description:
 * User: lmp
 * Date: 2022-05-24
 * Time: 21:14
 */
@Component
public class UserBean {
    @Bean(name = {"u1","userInfo1"}) //將當前對象存儲在Spring當中
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setAge(18);
        return user;
    }

    @Bean(name = "u2") //將當前對象存儲在Spring當中
    public User user2(){
        User user = new User();
        user.setId(1);
        user.setName("lisi");
        user.setAge(18);
        return user;
    }
}

五大註解之間的關系

從業務邏輯來說,@Controller是@Component的子類,同樣,@Service,@Repository,@Configuration都是@Component的子類

從Spring中獲取對象

@Autowired

屬性註入(屬性註冊)

Setter註入

構造方法註入

註入註解

@Qualifier 可以解決同一個類有兩個以上的對象的情況,可以使用這個註解,它相當於@Resource(name=“”)

三種註入的優缺點

  • 屬性註入的優點是簡潔,隻適用於IoC容器,如果非IOC容器不可用,會報空指針異常
  • 構造方法註入是Spring推薦的註入方式,缺點是如果有多個註入會顯得比較臃腫
  • Setter方式是Spring前期版本推薦的註入方式,但通用性不如構造方法,

@Resource

對象註入的另一種方式:使用@Resource註解,但Resource註解不能使用在構造方法上

@Autowired和@Resource的區別

1.出身不同,他們所屬的包不一樣,Resource屬於javajdk中的javax包中,而Autowired屬於springframework包中的

2.作用范圍不同,Resource不可以使用在構造方法註解上,而autowired可以

3.功能不同 Resource可以使用name屬性,從而完成對象的別名註入,而autowired沒有。

總結

到此這篇關於Spring更簡單的存儲方式與獲取方式的文章就介紹到這瞭,更多相關Spring存儲與獲取方式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: