spring 框架(一)
目錄
一、spring簡介
二、spring入門
?三、spring配置文件
3.1.bean標簽的基本配置(applicationContext.xml)
3.2Bean(scope:指對象的作用范圍)標簽范圍配置?
3.3 Bean生命周期配置
3.4 Bean實例化三種方式
3.5 Bean的依賴注入入門
3.6?Bean的依賴注入的數據類型
3.7?引入其他配置文件(分模塊開發)
4.1 ApplicationContext的繼承體系
4.2?getBean()方法使用
一、spring簡介
1.Spring是什么
Spring是分層的 Java SE/EE應用 full-stack 輕量級開源框架,以 IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面編程)為內核。
提供了展現層 SpringMVC 和持久層 Spring JDBCTemplate 以及業務層事務管理等眾多的企業級應用技術 ,還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的Java EE 企業應用開源框架。
二、spring入門
1 導入 Spring 開發的基本包坐標
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.16</version><scope>compile</scope> </dependency>2 編寫 Dao 接口和實現類
dao接口
public interface userDao {void save(); }?dao實現類
public class userDaoImpl implements userDao {@Overridepublic void save() {System.out.println(" 你好");} }3 創建 Spring 核心配置文件
4 在 Spring 配置文件中配置 UserDaoImpl
5 使用 Spring 的 API 獲得 Bean 實例
public class DaoService{public static viod main(String[] a){ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao u=(userDao)app.getBean("userDao"); u.save(); }}?三、spring配置文件
3.1.bean標簽的基本配置(applicationContext.xml)
用于配置對象交由Spring 來創建。 默認情況下它調用的是類中的無參構造函數,如果沒有無參構造函數則不能創建成功。
基本屬性:
3.2Bean(scope:指對象的作用范圍)標簽范圍配置?
| 取值范圍 | 說明 | Bean的實例化個數 | Bean的實例化時機: | Bean的生命周期: |
| singleton | 默認值,單例的 | 1個 | 當Spring核心文件被加載時,實例化配置的Bean實例 | ? 對象創建:當應用加載,創建容器時,對象就被創建了 ? 對象運行:只要容器在,對象一直活著 |
| prototype | 多例的 | 多個 | 當調用getBean()方法時實例化Bean | ? 對象創建:當使用對象時,創建新的對象實例 |
| request | WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 request 域中 | |||
| session | WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 session 域中 | |||
| global session | WEB 項目中,應用在 Portlet 環境,如果沒有 Portlet 環境那么globalSession 相當 于 session |
3.3 Bean生命周期配置
? init-method:指定類中的初始化方法名稱
? destroy-method:指定類中銷毀方法名稱
3.4 Bean實例化三種方式
? 無參構造方法實例化
之前演示的案例都是無參構造
? 工廠靜態方法實例化
?<bean id="UserDao" class="com.study.factory.factoryUserDao" factory-method="getUserDao" ></bean>
? 工廠實例方法實例化
?3.5 Bean的依賴注入入門
依賴注入(Dependency Injection):它是 Spring 框架核心 IOC 的具體實現。
? 構造方法
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg> </bean>
? set方法
public class userServiceImpl implements userService {private userDao userDao;public void setUserDao(userDao userDao) {this.userDao = userDao;}@Overridepublic void inke() {userDao.save();} } <?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="UserDao" class="com.study.dao.impl.userDaoImpl" ></bean><bean id="Service" class="com.study.Service.impl.userServiceImpl"><property name="userDao" ref="UserDao"></property></bean></beans>?如果覺得上面步驟太麻煩,也可以使用p標簽
P命名空間注入本質也是set方法注入,但比起上述的set方法注入更加方便,主要體現在配置文件中
xmlns:p="http://www.springframework.org/schema/p"
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao- ref="userDao"/>
3.6?Bean的依賴注入的數據類型
? 普通數據類型
public class UserDaoImpl implements UserDao { private String company; private int age; public void setCompany(String company) { this.company = company; } public void setAge(int age) { this.age = age; } public void save() { System.out.println(company+"==="+age); System.out.println("UserDao save method running...."); } } <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"><property name="company" value="華華"></property><property name="age" value="15"></property> </bean>? 引用數據類型
? 集合數據類型
public class UserDaoImpl implements UserDao {
private List<String> strList;
public void setStrList(List<String> strList) {
????????this.strList = strList; }
public void save() {
????????System.out.println(strList); System.out.println("UserDao save method running....");
} }
<bean id="userDao" class="com.study.dao.impl.UserDaoImpl"><property name="strList"><list> <value>aaa</value> <value>bbb</value><value>ccc</value></list> </property> </bean>集合數據類型map注入
public class UserDaoImpl implements UserDao {private Map<String,User> userMap;public void setUserMap(Map<String, User> userMap) {this.userMap = userMap; }public void save() {System.out.println(userMap); System.out.println("UserDao save method running....");}} <bean id="u1" class="com.study.domain.User"/> <bean id="u2" class="com.study.domain.User"/> <bean id="userDao" class="com.study.dao.impl.UserDaoImpl"> <property name="userMap"> <map><entry key="user1" value-ref="u1"/><entry key="user2" value-ref="u2"/></map> </property></bean>集合數據類型(Properties)的注入
public class UserDaoImpl implements UserDao {private Properties properties;public void setProperties(Properties properties) {this.properties = properties; }public void save() {System.out.println(properties); System.out.println("UserDao save method running....");}} <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"><property name="properties"> <props><prop key="p1">aaa</prop> <prop key="p2">bbb</prop> <prop key="p3">ccc</prop> </props> </property> </bean>3.7?引入其他配置文件(分模塊開發)
實際開發中,Spring的配置內容非常多,這就導致Spring配置很繁雜且體積很大,所以,可以將部分配置拆解到其他 配置文件中,而在Spring主配置文件通過import標簽進行加載
<import resource="applicationContext-xxx.xml"/>
<bean>標簽id屬性:在容器中Bean實例的唯一標識,不允 許重復class屬性:要實例化的Bean的全限定名,全包名scope屬性:Bean的作用范圍,常用是Singleton(默認)和prototype <property>標簽:屬性注入name屬性:屬性名稱 value屬性:注入的普通屬性值 ref屬性:注入的對象引用值 <list>標簽<map>標簽<properties>標簽<constructor-arg>標簽 <import>標簽:導入其他的Spring的分文件4.1 ApplicationContext的繼承體系
1)ClassPathXmlApplicationContext
它是從類的根路徑下加載配置文件 推薦使用這種
2)FileSystemXmlApplicationContext
它是從磁盤路徑上加載配置文件,配置文件可以在磁盤的任意位置。
3)AnnotationConfigApplicationContext
當使用注解配置容器對象時,需要使用此類來創建 spring 容器。它用來讀取注解。
4.3 getBean()方法使用
public Object getBean(String name) throws BeansException { assertBeanFactoryActive();
return getBeanFactory().getBean(name);
}
public <T> T getBean(Class<T> requiredType) throws BeansException { assertBeanFactoryActive();
return getBeanFactory().getBean(requiredType);
}
其中,當參數的數據類型是字符串時,表示根據Bean的id從容器中獲得Bean實例,返回是Object,需要強轉。 當參數的數據類型是Class類型時,表示根據類型從容器中匹配Bean實例,當容器中相同類型的Bean有多個時, 則此方法會報錯。
也就是說,如果Bean 只有一個,可以使用第二個(不需要強轉),如果存在一個bean但是多次分類別使用使用第一個,用id區分,
總結
以上是生活随笔為你收集整理的spring 框架(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机运维知识点,系统运维必会知识点
- 下一篇: oracle 邮件过程,oracle