註解式開發以及java類代替xml
阿新 • • 發佈:2020-08-13
目錄
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);
}