spring入門詳解?
一、Spring概述Spring是一個輕量級的DI/IOC和AOP的容器框架
??輕量級:簡單好用,通常來說功能不強大(但spring功能強大)
??DI(依賴注入):動態(tài)的向某個對象提供它所需要的其他對象,也可以為對象的屬性字段賦值。(依賴注入又分為xml注入和注解注入)
??IOC(控制翻轉(zhuǎn)):由spring控制對象的生命周期(創(chuàng)建,銷毀)
??AOP(面向切面編程):解決重復代碼。將相同的邏輯抽取出來,即將業(yè)務邏輯從應用服務中分離出來。然后以攔截的方式作用在一個方法的不同位置。
二、Spring入門
1.引入庫
導包的時候注意,現(xiàn)在使用Spring,要完成最小導包,即:需要什么jar包,我們就導入什么jar包,用到了其他功能,再添加相應jar包。這個對認識框架的包是非常有幫助的:
2.導入Spring配置文件
1. 在classpath的根目錄下新建一個applicationContext.xml配置文件,文件名可以自定義,但是通常使用ApplicationContext這個名字:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/Beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
</beans>
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
3.編寫邏輯代碼
public class MyBean {
public void hello(){
System.out.println("hello spring...");
}
}
1
2
3
4
5
6
1
2
3
4
5
6
4.將這個類交給Spring去管理即注冊到Spring容器中
在配置文件中將這個Java類交給Spring管理。在applicationContext.xml中配置
<beans ...>
<bean id="myBean" class="cn.itsource._01_hello.MyBean"></bean>
</beans>
1
2
3
4
1
2
3
4
5.Spring容器的實例化
Spring容器對象有兩種:BeanFactory和ApplicationContext(推薦使用)
BeanFactory
@Test
public void testHelloSpring1() throws Exception {
/**
*我們第一步是要啟動框架,而啟動框架則需要拿到Spring的核心對象
*咱們學習的第一個核心對象是BeanFactory : 顧名思義,這是一個創(chuàng)建Bean的工廠
*而Bean工廠創(chuàng)建對象又必需拿到配置文件中的數(shù)據(jù)
*因為:我們的第一步讀取配置文件,拿到BeanFactory工廠
*/
//第一步:讀取資源文件
Resource resource = new ClassPathResource("applicationContext.xml");
//第二步:拿到核心對象 BeanFactory
BeanFactory factory = new XmlBeanFactory(resource);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ApplicationContext(推薦使用)
@Test
public void testHelloSpring2() throws Exception {
/**
*我們第一步是要啟動框架,而啟動框架則需要拿到Spring的核心對象
*咱們學習的第一個核心對象是BeanFactory : 顧名思義,這是一個創(chuàng)建Bean的工廠
*而Bean工廠創(chuàng)建對象又必需拿到配置文件中的數(shù)據(jù)
*因為:我們的第一步讀取配置文件,拿到BeanFactory工廠
*/
//加載工程classpath下的配置文件實例化
String conf = "applicationContext.xml";
ApplicationContext factory = new ClassPathXmlApplicationContext(conf);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
6.獲取對象方式
方式一:通過id直接拿到相應的Bean對象
//通過xml中配置的id拿到對象
MyBean bean = (MyBean)factory.getBean("myBean");
System.out.println(bean);
1
2
3
4
1
2
3
4
方式二:通過id與對象的Class對象拿到Bean對象(推薦使用)
//通過id與對象的class拿到Bean對象
MyBean bean = factory.getBean("myBean",MyBean.class);
System.out.println(bean);
1
2
3
4
1
2
3
4
三、Spring依賴注入
1.xml注入
顧名思義:在xml中進行配置,但是這種方式必須有對應的setter方法,所有這種注入方式又稱之為屬性注入或setter方法注入
public class MyBean{
private OtherBean otherBean;
public void hello(){
otherBean.hello();
}
public void setOtherBean(OtherBean otherbean){
this.OtherBean = OtherBean
}
}
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
public class OtherBean{
public void hello(){
System.out.println("otherbean hello");
}
}
1
2
3
4
5
6
1
2
3
4
5
6
//xml配置:
<bean id="otherBean" class="cn.itsource.bean.OtherBean"></bean>
<bean id="myBean" class="cn.itsource.bean.MyBean">
<property name="otherBean" ref="otherBean"></property>
</bean>
1
2
3
4
5
6
1
2
3
4
5
6
2.注解注入
顧名思義:通過注解實現(xiàn)注入,這種方式可以將注解寫在setter方法上,也可以寫在字段上,如果寫在字段上可以不需要setter方法
2.1方案一:使用@Autowired
@Autowired為Spring提供的注解
public class MyBean{
@Autowired
private OtherBean otherBean;
public void hello(){
otherBean.hello();
}
}
public class OtherBean{
public void hello(){
System.out.println("otherbean hello");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//xml配置:
<bean id="otherBean" class="cn.itsource.bean.OtherBean"></bean>
<bean id="myBean" class="cn.itsource.bean.MyBean"></bean>
1
2
3
1
2
3
2.2方案二:使用@Resource
public class MyBean{
@Resource
private OtherBean otherBean;
public void hello(){
otherBean.hello();
}
}
public class OtherBean{
public void hello(){
System.out.println("otherbean hello");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2.3@Autowired和@Resource區(qū)別
@Autowired:默認類型匹配再按照名字匹配
@Resource:默認按照名字匹配然后按照類型匹配