欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring注解與P/C命名空間超詳細解析

 更新時間:2022年11月22日 15:17:55   作者:wei_shuo  
Spring注解方式減少了配置文件內容,更加便于管理,并且使用注解可以大大提高了開發(fā)效率!注解本身是沒有功能的,和xml一樣,注解和xml都是一種元數(shù)據,元數(shù)據即解釋數(shù)據的數(shù)據,也就是所謂的配置

注解實現(xiàn)自動裝配

@Autowire注解

@Autowire注解,自動裝配通過類型,名字如果Autowire不能唯一自動裝配上屬性,

則需要通過@Qualifier(value=“xxx”)

配置:

導入約束

<?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:annotation-config/>

實現(xiàn):

Dog/Cat類和方法的實現(xiàn)還是不變

People類

  • 實現(xiàn)@Autowire注解、可以在屬性上使用、也可以在set方式使用
  • 編寫@Autowire注解后,set方法可以省略不寫
public class People {
    @Autowired
    private Cat cat;
    @Autowired
    private Dog dog;
    private String name;
}

beans.xml

    <bean id="cat" class="com.wei.pojo.Cat"/>
    <bean id="dog" class="com.wei.pojo.Dog"/>
    <bean id="people" class="com.wei.pojo.People"/>

@Nullable 字段標記了這個注解,說明這個字段可以為null

可以在帶參構造中使用@Nullable

    public People(@Nullable String name) {
        this.name = name;
    }

@Qualifier注解

指定一個唯一的bean對象注入

People類

public class People {
    @Autowired
    @Qualifier(value = "cat111")
    private Cat cat;
    @Autowired
    @Qualifier(value = "dog222")
    private Dog dog;
    private String name;
}

beans.xml

    <bean id="cat" class="com.wei.pojo.Cat"/>
    <bean id="cat111" class="com.wei.pojo.Cat"/>
    <bean id="dog" class="com.wei.pojo.Dog"/>
    <bean id="dog222" class="com.wei.pojo.Dog"/>
    <bean id="people" class="com.wei.pojo.People"/>

@Resource注解

默認按照名字裝配Bean,即會按照name屬性的值來找到具有相同id的Bean Definition 并注入

People類

public class People {
    @Resource(name = "cat2")
    private Cat cat;
    @Resource
    private Dog dog;
    private String name;
}

beans.xml

<bean id="cat1" class="com.wei.pojo.Cat"/>
<bean id="cat2" class="com.wei.pojo.Cat"/>
<bean id="dog" class="com.wei.pojo.Dog"/>
<bean id="people" class="com.wei.pojo.People"/>

總結:

  • @Autowire 通過byType方式實現(xiàn),而且必須要求對象存在,不能為null
  • @Resource 默認通過byname的方式實現(xiàn),如果找不到名字,則通過byType實現(xiàn),都不行則報錯

@Component

放在類上,說明這個類被Spring管理了,等同于bean配置

Java類

此處使用注解@Component @Value 則 beans.xml則無需書寫bean

//等價于<bean id="user" class="com.wei.pojo.User       Component:組件
@Component
public class User {
    @Value("wei_shuo")  //相當于 <property name="name" value="wei_shuo"/>
    public String name;
}

@Component的衍生注解,在web開發(fā)中,按照MVC三層架構分層

四個注解功能、作用相同,都是代表將某個類注冊到Spring中、裝配Bean

  • pojo —> @Component
  • dao —> @Resource
  • service —> @Service
  • controller —> @Controller

@Scope

作用域注解,限定Spring Bean的作用范圍,在Spring配置文件定義Bean時,通過聲明scope配置項,可以靈活定義Bean的作用范圍

@ComponentScan

@ComponentScan(“com.wei.pojo”) 掃描包

@Bean

  • 注冊一個bean,就相當于bean標簽
  • 方法的名字,相當于bean標簽的id屬性
  • 方法的返回值,相當于bean標簽的class屬性
    @Bean
    public User getUser(){
        return new User();      //就是返回要注入到bean的對象
    }

@Configuration

@Configuration注解會被Spring容器托管,因為它本身就是一個@Component

@Configuration 代表這是一個配置類,相當于beans.xml

@Configuration
@ComponentScan("com.wei.pojo")      
@Import(WeiConfig2.class)           
public class WeiConfig {
    @Bean
    public User getUser(){
        return new User();      
    }
}

@Value

屬性注入值

Java類

此處使用@Scope注解使用prototype多實例注解模式

//等價于<bean id="user" class="com.wei.pojo.User       Component:組件
@Component
@Scope("prototype")		//作用域注解
public class User {
    @Value("wei_shuo")  //相當于 <property name="name" value="wei_shuo"/>
    public String name;
}

P命名空間注入

p命名空間注入,對應Set注入方式

需要創(chuàng)建set/get方法

p命名空間注入,可以直接注入屬性的值:property

User類

package com.wei.pojo;
public class User {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

userbeans.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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!--上面添加 xmlns:p="http://www.springframework.org/schema/p" -->
    <!--p命名空間注入,可以直接注入屬性的值:property-->
    <bean id="user" class="com.wei.pojo.User" p:name="秦疆" p:age="18"/>
</beans>

Test測試

        ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
//        指定類型User.class則不需要強制轉換
        User user = context.getBean("user", User.class);
//        強制轉換
//        User user = (User) context.getBean("user");
        System.out.println(user);

C命名空間注入

c命名空間注入,對應構造器注入

需要創(chuàng)建無參/帶參構造方法

c命名空間注入,通過構造器 注入:construct-args

User類

此處增加無參/帶參構造方法

public class User {
    private String name;
    private int age;
    public User() {
    }
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

userbeans.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:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!--上面添加  xmlns:c="http://www.springframework.org/schema/c" -->
    <!--c命名空間注入,通過構造器 注入:construct-args-->
    <bean id="user2" class="com.wei.pojo.User" c:name="wei_shuo" c:age="18"/>
</beans>

Test測試

        ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
        User user = context.getBean("user2", User.class);
        System.out.println(user);

總結:

p命名空間注入/c命名空間注入 都需要導入xml約束,不能直接使用

xmlns:p=“http://www.springframework.org/schema/p”

xmlns:c=“http://www.springframework.org/schema/c”

Spring開發(fā)包名解釋

dao包

數(shù)據庫操作,crud 即增刪改查,對于數(shù)據庫的增刪改查的操作都在這里

pojo包

簡單java對象

service包

service 服務器層,也叫業(yè)務邏輯層,調用dao中的方法

Java方式配置

使用Java的方式配置Spring,也就是不寫bean.xml配置,使用注解代替

實體列

//@Configurable放在類上,說明這個類被Spring管理了,等同于bean配置,注冊到容器中
@Configurable
public class User {
    private String name;
    public String getName() {
        return name;
    }
    @Value("CSDN")  //屬性注入值
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

配置文件

  • @Configuration注解會被Spring容器托管,因為它本身就是一個@Component
  • @Configuration 代表這是一個配置類,相當于beans.xml
  • @Import注解,功能就是和Spring XML里面的一樣. @Import注解是用來導入配置類或者一些需要前置加載的類.通俗的將就是將類放入到IOC容器中
  • @Bean注解,注冊一個bean,就相當于bean標簽,方法的名字,相當于bean標簽的id屬性,方法的返回值,相當于bean標簽的class屬性
//@Configuration注解會被Spring容器托管,因為它本身就是一個@Component
//@Configuration 代表這是一個配置類,相當于beans.xml
@Configuration
@ComponentScan("com.wei.pojo")      //掃描包
@Import(WeiConfig2.class)           //@Import注解,功能就是和Spring XML里面的一樣. @Import注解是用來導入配置類或者一些需要前置加載的類.通俗的將就是將類放入到IOC容器中
public class WeiConfig {
    //注冊一個bean,就相當于bean標簽
    //方法的名字,相當于bean標簽的id屬性
    //方法的返回值,相當于bean標簽的class屬性
    @Bean
    public User getUser(){
        return new User();      //就是返回要注入到bean的對象
    }
}

測試類

public class MyTest {
    //如果完全使用了配置類方式去做,只能通過AnnotationConfig 上下文來獲取容器,通過配置類的class對象加載
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(WeiConfig.class);
        User getUser = (User) context.getBean("getUser");   //此處取方法名
        System.out.println(getUser.getName());
    }
}

到此這篇關于Spring注解與P/C命名空間超詳細解析的文章就介紹到這了,更多相關Spring注解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring-boot oauth2使用RestTemplate進行后臺自動登錄的實現(xiàn)

    Spring-boot oauth2使用RestTemplate進行后臺自動登錄的實現(xiàn)

    這篇文章主要介紹了Spring-boot oauth2使用RestTemplate進行后臺自動登錄的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java設計模式編程中簡單工廠與抽象工廠模式的使用實例

    Java設計模式編程中簡單工廠與抽象工廠模式的使用實例

    這篇文章主要介紹了Java設計模式編程中簡單工廠與抽象工廠模式的使用實例,簡單工廠與抽象工廠都可以歸類于設計模式中的創(chuàng)建型模式,需要的朋友可以參考下
    2016-04-04
  • AsyncHttpClient?RequestFilter請求篩選源碼解讀

    AsyncHttpClient?RequestFilter請求篩選源碼解讀

    這篇文章主要為大家介紹了AsyncHttpClient?RequestFilter請求篩選源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Intellij IDEA Debug調試技巧(小結)

    Intellij IDEA Debug調試技巧(小結)

    這篇文章主要介紹了Intellij IDEA Debug調試技巧(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 簡單了解java標識符的作用和命名規(guī)則

    簡單了解java標識符的作用和命名規(guī)則

    這篇文章主要介紹了簡單了解java標識符的作用和命名規(guī)則,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Spring Cloud Gateway 緩存區(qū)異常問題及解決方案

    Spring Cloud Gateway 緩存區(qū)異常問題及解決方案

    最近在測試環(huán)境spring cloud gateway突然出現(xiàn)了異常,接下來通過本文給大家介紹Spring Cloud Gateway 緩存區(qū)異常問題解決方案,需要的朋友可以參考下
    2024-06-06
  • Java集合之Map接口的實現(xiàn)類精解

    Java集合之Map接口的實現(xiàn)類精解

    Map提供了一種映射關系,其中的元素是以鍵值對(key-value)的形式存儲的,能夠實現(xiàn)根據key快速查找value;Map中的鍵值對以Entry類型的對象實例形式存在;鍵(key值)不可重復,value值可以重復,一個value值可以和很多key值形成對應關系,每個建最多只能映射到一個值
    2021-09-09
  • SpringSecurity實現(xiàn)動態(tài)加載權限信息的方法

    SpringSecurity實現(xiàn)動態(tài)加載權限信息的方法

    這篇文章主要介紹了SpringSecurity實現(xiàn)動態(tài)加載權限信息,本文給大家介紹的非常詳細,對大家的學習或工作具有一定需要的朋友可以參考下
    2022-01-01
  • 探索Java I/O 模型的演進

    探索Java I/O 模型的演進

    什么是同步?什么是異步?阻塞和非阻塞又有什么區(qū)別?本文先從 Unix 的 I/O 模型講起,介紹了5種常見的 I/O 模型。而后再引出 Java 的 I/O 模型的演進過程,并用實例說明如何選擇合適的 Java I/O 模型來提高系統(tǒng)的并發(fā)量和可用性。,需要的朋友可以參考下
    2019-06-06
  • Java中對List集合的常用操作詳解

    Java中對List集合的常用操作詳解

    下面小編就為大家?guī)硪黄狫ava中對List集合的常用操作詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論