一、Spring介绍

Spring负责管理项目中的所有对象。Spring是一站式框架,仅仅使用Spring足以完成Web项目。


二、Spring项目搭建以及测试

环境为IDEA,Spring项目创建:

创建一个对象:
public class User { private String name; public String getName() { return
name; }public void setName(String name) { this.name = name; } }
配置文件(建议放到src下面):
<?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">
<!--将user对象交给Spring容器--> <bean id="user" class="domain.User"> <property name=
"name" value="naruto"></property> </bean> </beans>
测试代码:
public class Main { public static void main(String[] args){ //创建容器对象
//ApplicationContext对象在加载 spring-config.xml(容器启动)时候就会创建 ApplicationContext
context =new ClassPathXmlApplicationContext("spring-config.xml"); //向容器要user对象
User user = (User) context.getBean("user"); System.out.println(user.getName());
} }
运行结果:naruto

三、IOC和DI

IOC:Inverse Of
Control反转控制。即将我们创建对象的方式反转,以前对象的创建和依赖关系是我们自己维护。使用Spring之后,对象的创建以及依赖关系可以由Spring完成创建以及注入。
DI:Dependency
Injection依赖注入,实现IOC思想需要DI做支持,注入方式:set方式注入、构造方式注入、字段注入。注入类型:值类型注入、引用类型注入。

四、三种创建对象方式

4.1、空参构造方法创建
public class User { public User() { } private String name; public String
getName() { return name; } public void setName(String name) { this.name = name;
} } <?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">
<!--创建方式1:空参构造创建--> <bean name="user" class="domain.User"> <property name="name"
value="naruto"></property> </bean> </beans>
4.2、静态工厂方法创建
public class UserFactory { public static User createUser(){ System.out.println(
"静态工厂创建User"); return new User(); } } <?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"> <!--
创建方式2:静态工厂创建 调用UserFactory的createUser方法创建名为user2的对象.放入容器 --> <bean name="user2"
class="domain.UserFactory" factory-method="createUser" > </bean> </beans>
4.3、实例工厂方法创建
public class UserFactory { public User createUser2(){ System.out.println(
"实例工厂创建User"); return new User(); } } <?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"> <!--
创建方式3:实例工厂创建 调用UserFactory对象的createUser2方法创建名为user3的对象.放入容器 --> <bean name=
"user3" factory-bean="userFactory" factory-method="createUser2" > </bean> <bean
name="userFactory" class="domain.UserFactory" > </bean> </beans>
五、Scpoe属性

Scpoe即Bean的作用范围:
singleton :默认值,单例的。
prototype :多例的
request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中。
session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中。(了解即可)
globalSession :WEB 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当于
session。(了解即可)

六、模块化配置

在一个配置文件中包含另一个配置文件:
<import resource="applicationContext2.xml"></import>
七、Spring属性注入

7.1、set方法注入

User对象:
public class User { public User() { } private String name; private Car car;
public Car getCar() { return car; } public void setCar(Car car) { this.car =
car; }public String getName() { return name; } public void setName(String name)
{this.name = name; } @Override public String toString() { return "User{" +
"name='" + name + '\'' + ", car=" + car + '}'; } }
Car对象:
public class Car { private String color; public String getColor() { return
color; }public void setColor(String color) { this.color = color; } @Override
public String toString() { return "Car{" + "color='" + color + '\'' + '}'; } }
注入容器:
<?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.spring framework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--set方式注入--> <
bean name="user6" class="domain.User"> <!--为User对象中名为name的属性注入naruto--> <
property name="name" value="naruto"></property> <property name="car" ref="car">
</property> </bean> <!--将car对象配置到容器中--> <bean name="car" class="domain.Car">
<!--为car对象中名为color的属性注入yellow--> <property name="color" value="yellow"></
property> </bean> </beans>
运行测试:
public class Main { public static void main(String[] args){ ApplicationContext
context =new ClassPathXmlApplicationContext("spring-config.xml"); User user =
(User) context.getBean("user6"); System.out.println(user.toString()); } }
运行结果:User{name=’naruto’, car=Car{color=’yellow’}}

7.2、构造函数注入

User对象:
public class User { public User() { } private String name; private Car car;
public User(Car car, String name) { this.car = car; this.name = name; } public
CargetCar() { return car; } public void setCar(Car car) { this.car = car; }
public String getName() { return name; } public void setName(String name) { this
.name = name; } @Overridepublic String toString() { return "User{" + "name='" +
name +'\'' + ", car=" + car + '}'; } }
配置:
<?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">
<!--将car对象配置到容器中--> <bean name="car" class="domain.Car">
<!--为car对象中名为color的属性注入yellow--> <property name="color" value="yellow"></
property> </bean> <!--构造方法注入--> <bean name="user66" class="domain.User">
<!--为User对象中名为name的属性注入naruto--> <constructor-arg name="name" value="long" index
="1"></constructor-arg> <constructor-arg name="car" ref="car"></constructor-arg>
</bean> </beans>
运行测试:
public class Main { public static void main(String[] args){ ApplicationContext
context =new ClassPathXmlApplicationContext("spring-config.xml"); User user =
(User) context.getBean("user66"); System.out.println(user.toString()); } }
7.3、复杂类型注入

创建一个复杂对象:
public class CollectionBean { private Object[] arr;//数组类型注入 private List list;
//list/set 类型注入 private Map map;//map类型注入 private Properties prop;
//properties类型注入 public Object[] getArr() { return arr; } public void setArr
(Object[] arr) {this.arr = arr; } public List getList() { return list; } public
void setList(List list) { this.list = list; } public Map getMap() { return map;
}public void setMap(Map map) { this.map = map; } public Properties getProp() {
return prop; } public void setProp(Properties prop) { this.prop = prop; }
@Overridepublic String toString() { return "CollectionBean [arr=" +
Arrays.toString(arr) +", list=" + list + ", map=" + map + ", prop=" + prop + "]"
; } }
配置:
<!-- ============================================================= --> <!--
复杂类型注入 --> <bean name="cb" class="domain.CollectionBean" > <!--
如果数组中只准备注入一个值(对象),直接使用value|ref即可 <property name="arr" value="tom" ></property>
--> <!-- array注入,多个元素注入 --> <property name="arr"> <array> <value>tom</value> <
value>jerry</value> <ref bean="user6" /> </array> </property> <!--
如果List中只准备注入一个值(对象),直接使用value|ref即可 <property name="list" value="jack"
></property>--> <property name="list" > <list> <value>jack</value> <value>rose</
value> <ref bean="user3" /> </list> </property> <!-- map类型注入 --> <property name=
"map" > <map> <entry key="url" value="jdbc:mysql:///crm" ></entry> <entry key=
"user" value-ref="user6" ></entry> <entry key-ref="user3" value-ref="user2" ></
entry> </map> </property> <!-- prperties 类型注入 --> <property name="prop" > <props
> <prop key="driverClass">com.jdbc.mysql.Driver</prop> <prop key="userName">root
</prop> <prop key="password">1234</prop> </props> </property> </bean>
八、Spring整合Web项目配置

配置监听器:
<!-监听器:服务器启动,Spring对象创建,服务器销毁,Spring对象销毁。--> <listener> <listener-class>
org.springframework.web.context.ContextLoaderListener</listenerclass> </listener
> <!--指定加载Spring配置文件的位置。--> <context-param> <param-name>contextConfigLocation</
param-name> <param-value>classpath:applicationContext.xml</param-value> </
context-param>
Spring将容器放入ServletContext中去了,即可以从Application域中获取Spring对象。

Spring系列目录:
Spring基础系列(一) <https://blog.csdn.net/weixin_41835916/article/details/80852760>
Spring基础系列(二) <https://blog.csdn.net/weixin_41835916/article/details/80872595>
Spring基础系列(三) <https://blog.csdn.net/weixin_41835916/article/details/80877562>

转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916
<https://blog.csdn.net/weixin_41835916>
如果觉得本文对您有帮助,请点击顶支持一下,您的支持是我写作最大的动力,谢谢。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信