1. 程式人生 > 實用技巧 >註解式開發以及java類代替xml

註解式開發以及java類代替xml

目錄

8、註解式自動裝配

@Autowired

(1)可以新增在屬性上也可以新增在set放上上面,set方法可以省略,但是省略的前提是xml配置檔案中必須要有bean物件【如果使用了@Data就無需考慮這些問題】

@ToString
public class User implements Serializable {

    private String name;
    @Autowired
    private Student student;
    private Teacher teacher;

}
<bean id="user" class="com.ch.pojo.User"></bean>
<bean id="student" class="com.ch.pojo.Student"></bean>

(2)Autowired中可以設定引數

@Autowired(required = false)
private Student student;

預設為true,如果設定為false,則可以不需要xml配置檔案中必須有該bean物件

(3)Autowired是根據型別(byType)進行自動裝配的

【重點】

(4)如果引數型別較多,或者一致,就可以配合@Qualifier,通過唯一id進行匹配

@Qualifier

(1)一般配合@Autowired唯一定位一個bean物件,引數為物件名(id)

@Autowired(required = false)
@Qualifier("student111")
private Student student;
<bean id="student111" class="com.ch.pojo.Student"></bean>

@Resource

(1)Resource其實就是@Autowired和@Qualifier的一種結合

(2)裝配的規則是:先找名字,名字一致再找型別進行匹配【重點】

(3)可以設定名字引數

@Resource(name = "tea")
private Teacher teacher;
<bean id="tea" class="com.ch.pojo.Teacher"></bean>

9、註解式開發

bean == @Component

注意點:

  • 必須新增context約束
  • 必須添加註解的支援和配置掃描
<?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></context:annotation-config>
    <!-- 配置掃描 -->
    <context:component-scan base-package="com.ch.pojo"></context:component-scan>

</beans>
@Data
/**
 * @Component
 * 等效於
 * <bean id="user1" class="com.ch.pojo.User1"></bean>
 * 
 * id ==> 類首字母小寫
 */
@Component
public class User1 implements Serializable {

    private String name;
    private Student student;
    private Teacher teacher;

}

衍生出來的幾個註解【Spring四大註解】

只要標註了該註解的類,就會自動注入到IOC容器中

(1)@Repository:用來標註在Dao(持久層)上

(2)@Service:用來標註在Service(業務層)上

(3)@Controller:用來標註在Controller(控制層)上

(4)@Component:用來標註在其他類上

屬性 == @Value

/**
  * @Value("張三")
  * 等效於
  * <property name="name" value="張三"></property>
  */
@Value("張三")
private String name;

作用域 == @Scope

/**
 * @Scope("singleton")
 * 等效於
 * <bean id="user1" class="com.ch.pojo.User1" scope="singleton"></bean>
 */
@Scope("singleton")
public class User1 implements Serializable {
    …………

總結

xml配置和註解:自己寫的類用註解,別人寫的類用xml 配置檔案

10、Java類代替xml

ApplicationConfig.java

//標註是一個配置類
@Configuration
//配置掃描器
@ComponentScan("com.ch.pojo")
//引入其他Java配置檔案
@Import(ApplicationConfig1.class)
public class ApplicationConfig {

    /**
     * @Bean : 標註該該方法是一個bean物件
     *
     * 方法名:相當於bean中的id屬性
     * 返回值:相當於bean中的class屬性
     * return:相當於bean中返回的物件
     */
    @Bean
    public User1 getUser1(){
        return new User1();
    }

}

測試類

@Test
public void Test1(){
    ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
    User1 user1 = (User1) context.getBean("getUser1");
    System.out.println(user1);
}