文章目录
spring基础之-0-初识spring框架
一、什么是spring框架?
包括 ioc(inverse of controll) 控制反转和 aop(aspect oriented programming):面向切面编程;
具体来说,spring提供了许多服务/技术:springmvc、spring jdbcTemplate 、spring security、service level transaction manager
二、搭建 spring 框架
-
idea 搭建
-
eclipse搭建
三、spring 配置文件
1、bean的 生命周期
bean 的生命周期 | 描述 |
---|---|
singleton | 默认;单例模式;在配置文件加载时创建一次 |
prototype | 多例模式;在使用时(getBean)创建实例 |
request | web |
session | web |
application | web |
2、bean 的 生命周期函数(不重要)
-
init-method
-
destroy-method
3、注入bean的各种方法
3.1、无参构造【常用】
<!-- 注入bean方法1:无参构造 开始 -->
<bean id="userDao1" class="org.jnr.dao.impl.DaoImpl" scope="prototype" init-method="init"
destroy-method="destroy"></bean>
<!-- 注入bean方法1:无参构造 结束 -->
3.2、有参构造
<!-- 注入bean方法2:有参构造 开始 -->
<bean id="userDao2" class="org.jnr.dao.impl.DaoImpl">
<constructor-arg name="num1" value="1"/>
<constructor-arg name="num2" value="2"></constructor-arg>
</bean>
<!-- 注入bean方法2:有参构造 结束 -->
3.3、set构造
<!-- 注入bean方法3:set构造 开始-->
<bean id="userDao3" class="org.jnr.dao.impl.DaoImpl">
<property name="num1" value="2"></property>
</bean>
<!-- 注入bean方法3:set构造 结束-->
3.4、静态工厂构造
<!-- 注入bean方法4:静态工厂构造 开始-->
<bean class="org.jnr.factory.StaticFactory" id="userDao4" factory-method="getUserDao"></bean>
<!-- 注入bean方法4:静态工厂构造 结束-->
3.5、动态工厂构造
<!-- 注入bean方法5:动态工厂构造 开始 -->
<!-- 需要先有工厂实例 -->
<bean id="dynamicFactory" class="org.jnr.factory.DynamicFactory"></bean>
<bean class="org.jnr.factory.DynamicFactory" id="userDao5" factory-bean="dynamicFactory"
factory-method="getUserDao"></bean>
<!-- 注入bean方法5:动态工厂构造 结束 -->
3.6、@Value注入属性值【常用】
-
先编写属性类
@Component public class PropertiesConfig { @Value("1") private Integer id; @Value("张三") public String name; public String getName() { return name; } public Integer getId() { return id; } }
-
在 applicationContext.xml 配置文件中 扫描以上包
<context:component-scan base-package="org.jnr.pojo,org.jnr.entity,org.jnr.config"/>
-
在需要使用属性的bean中使用(该类同样需要被扫描,被spring ioc 接管)
@Component("pojo") public class Pojo implements Serializable { private static final long serialVersionUID = -6849794470754667710L; //注入上面配置的属性bean @Autowired private PropertiesConfig propertiesConfig; //给本类的属性注入值,采用SpringEl 表达式写法 @Value("#{propertiesConfig.id}") private Integer id1; @Value("#{propertiesConfig.name}") private String name1; }
3.7、配置文件注入属性值【常用】
-
读取 properties文件,可以分析源码发现是以 ISO-8859-A 编码读取的,会造成中文乱码;但是yml文件是以 utf-8编码的不会乱码,因此使用properties文件时导入文件需要指定编码格式,下面两种方式都可以
-
//第一种方式 @PropertySource(value="classpath:application.properties", encoding="UTF-8")
-
<!-- 第二种方式 --> <context:property-placeholder location="classpath:application.properties" file-encoding="UTF-8" ignore-unresolvable="true"/>
-
使用(该类同样需要被扫描,被spring ioc 接管)
//这里采用第一种方式,注解加载 properties文件并设置文件 编码 @PropertySource(value="classpath:application.properties", encoding="UTF-8") //加入 spring ioc 容器 @Component("pojo") public class Pojo implements Serializable { private static final long serialVersionUID = -6849794470754667710L; //注入属性值 @Value("${pojo.id}") private Integer id; //注入属性值 @Value("${pojo.name}") private String name; }
3.8 、其他
### 4、依赖注入
4.1、set 注入
4.1.1、注入方式
-
常用方式
-
p命名空间
4.1.2 注入类型
-
引用类型
-
<property name="user" ref="user"/>
-
-
普通类型
-
<property name="id" value="1"/> <property name="name" value="Zhuzhu康"/>
-
-
集合类型
-
-
<property name="strMap"> <map> <entry key="1" value="1"/> <entry key="2" value="str2猪猪"/> </map> </property>
-
<property name="userMap"> <map> <entry key="1" value-ref="user"/> </map> </property>
-
-
-
<property name="userList"> <list> <ref bean="user"/> </list> </property>
-
<property name="strList"> <list> <value>1</value> <value>2</value> <value>3</value> </list> </property>
-
-
-
<property name="strArray"> <array> <value>1</value> <value>2</value> <value>3</value> </array> </property>
-
-
-
<property name="props"> <props> <prop key="1">1</prop> <prop key="2">2</prop> <prop key="3">3</prop> <prop key="4">4</prop> </props> </property>
-
-
4.2、构造方法注入
一个参数对应一个
5、spring 导入配置文件(注解或xml),然后可以在xml中或者被容器管理的bean实例中使用 (通过 Spring Expression Language 、@Value注解实现)
5.1、xml方式 --注意,context:property-placeholder 只能使用一次
<context:property-placeholder=“classpath:xxx.properties” file-encoding=“utf-8”/>
5.2、annotation方式 --注意,与上面不同的是,这里的注解可以使用多次,即可以加载多个配置文件(当然了,一个类只能对应一个注解,你想要多个注解的话需要多个类),另外,要使用注解,必须该类已经被 springioc容器所管理,不然是无效的。
@PropertySource(value=“xxx.properties”,encoding=“UTF-8”)
6、spring El 表达式
代补充
四、spring 相关 API、源码
ClassPathXmlApplicationContext :通过 类加载路径加载配置文件
FileSystemXmlApplicationContext :通过文件系统加载配置文件
AnnotationConfigApplicationContext:通过注解加载配置文件
五、spring注解
1、原始注解(之前的注解,主要适用于 bean)
@Scope
@Async
@Aspect
@AutoWired
@Resource
@Qualifier
@Post
@PostConstructor
@PreDestory
@EnableAsync
2、新增的注解(主要用于管理 配置类bean)
@Import
@Bean
@PropertySource
@ComponentScan
@Configuration
3、spring集成junit4 注解
@RunWith(SpringJunit4ClassRunner)
@ContextConfiguration(location=“applicationContext配置文件”)
@Test