spring注入list_Spring框架的总结(一)

个人总是看完教学视频,然后就以为会了, 然而比如别人问,说说你对spring的理解,就只知道说个IOC和AOP,还说的不太对,所以想要成为高手,必须要学会总结,只有你把学的东西一条条列出来,说出来,并都理解且能够应用到实际,你才可以说,这玩意,你会了。

1,什么是Spring

Spring是一个开源框架,是从2003年兴起的一个轻量级的java开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的javaSE/javaEE一站式的开源框架。

1.1,什么是一站式框架

一站式框架就是有javaEE每一层解决方案的框架。

spring在WEB层有:Springmvc,Service层有:Spring的Bean管理,Spring的声明式事务

DAO层有:Spring的jdbc模板,Spring的ORM模块(用于与ORM框架整合,如 maybatis,hibernate)

2,Spring的优点

46c705f1b34e325c656a34af5c434a2a.png

3,什么是IOC

Inversion of control(控制反转):将对象的创建权反转给Spring。

IOC的好处(代码解释)

public interface UserDao {
    
    public void save();

}
public class UserDaoJdbcImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("UserDaoJdbcImpl 执行了...");
    }
}

public class UserDaoMybatisImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("UserDaoMybatisImpl 执行了...");
    }
}

// 传统调用UserDaoImpl的方式
UserDao userDao = new UserDaoJdbcImpl();
// 如果我们想调用UserDaoMybatisImpl就必须要改源码
UserDao userDao = new UserDaoMybatisImpl();

// 工厂方法

public class BeanFactory {
    
    public static UserDao getUserDao() {
        return new UserDaoJdbcImpl();
    } 
}
// 同样如果我们想调用UserDaoMybatisImpl虽然不用改接口了,可还是要修改工厂类
return new UserDaoMybatisImpl();

// IOC的方法就是工厂+反射+配置文件
// 配置文件
<bean id="userDao" class="xxx.xxx.xxx.UserDaoJdbcImpl" />
// 工厂
public class BeanFactory {
  
    public static Object getBean(String id) {
        // 解析配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext("xxx.xml");
        // 反射
        Class<?> forName = UserDao.class.forName(id);
        return forName.newInstance();
}
// 这样如果我们想调用UserDaoMybatisImpl就不用修改代码了只需要修改配置文件就行了
<bean id="userDao" class="xxx.xxx.xxx.UserDaoMybatisImpl" />

4,什么是DI

DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。

5,Spring的工厂类

19037a8a9b463912021c11741f693a41.png

1)老版本的工厂类

BeanFactory:调用getBean的时候,才会生成类的实例

2)新版本的工厂类

ApplicationContext:在加载配置文件的时候,就将spring管理的类都实例化

ApplicationContext是接口,它有2个实现类

(1)ClassPathXmlApplicationContext:加载类路径下的配置文件

(2)FileSystemXmlApplicationContext:加载文件系统下的配置文件如/usr/local/a.xml

6,<bean>标签的配置

1)id和name的区别

id:使用了约束中的唯一约束。里面不出现特殊字符如/?之类的

name:没有唯一约束(理论上可以重复,实际开发不能出现),可以出现特殊字符

2)bean的生命周期

init-method:bean被初始化的时候执行的方法。

destroy-method:bean被销毁的时候执行的方法(要满足2个条件1,bean是单列,2工作关闭)

3)bean的作用范围 scope属性

singleton :默认的,Spring会采用单例的模式创建这个对象

prototype :多例模式。(Struts2和Spring整合一定会用到)

request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。

session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。

globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

7,spring的属性注入

1)构造方法的属性注入

  <bean id="user" class="xxx.User">
       <constructor-arg name="name" value="老周"/>
       <constructor-arg name="age" value="25"/>
  </bean>

2) Set方法的方式的属性注入

  <bean id="user" class="xxx.User">
     <property name="name" value="老周"/>
     <property name="age" value="25"/>
  </bean>

3) P名称空间的属性注入(spring2.5以后,现在应该不会有人还用2.5前的版本把=-=)

 // 写法:普通属性  p:属性名=”值” 对象属性	p:属性名-ref=”值”
<bean id="car" class="xxx.Car" p:name="QQ" p:price="20000"
<bean id="user" class="xxx.User" p:name="老周" p:age="25" p:car-ref="car"></bean>

4) SpEL的属性注入(Spring3.0以后)

// SpEL:Spring Expression Language,Spring的表达式语言。
<bean id="user" class="xxx.User">
     <property name="name" value="#{user.name}"/>
     <property name="age" value="#{user.age}"/>
 </bean>

5) 集合类型的属性注入

<!-- Spring的集合属性的注入============================ -->
	<!-- 注入数组类型 -->
	<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
		<!-- 数组类型 -->
		<property name="arrs">
			<list>
				<value>王东</value>
				<value>赵洪</value>
				<value>李冠希</value>
			</list>
		</property>
		
		<!-- 注入list集合 -->
		<property name="list">
			<list>
				<value>李兵</value>
				<value>赵如何</value>
				<value>邓凤</value>
			</list>
		</property>
		
		<!-- 注入set集合 -->
		<property name="set">
			<set>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</set>
		</property>
		
		<!-- 注入Map集合 -->
		<property name="map">
			<map>
				<entry key="aaa" value="111"/>
				<entry key="bbb" value="222"/>
				<entry key="ccc" value="333"/>
			</map>
		</property>
	</bean>

8,spring分模块的配置

// 代码中
 ApplicationContext ac = new ClassPathXmlApplicationContext("xxx.xml", "xxx.xml");
// 配置文件中
<import resource="xxx.xml"/>

9,ContextLoaderListener

1)作用

每次请求都会创建一个Spring的工厂,这样浪费服务器资源,应该一个项目只有一个Spring的工厂。

在服务器启动的时候,创建一个Spring的工厂。

创建完工厂,将这个工厂类保存到ServletContext中。

每次使用的时候都从ServletContext中获取。

使用ServletContextListener

监听ServletContext对象的创建和销毁。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

今天就总结到这里了,spring一共总结3篇,接下来就是springmvc,mybatis...

我老周一定会成为大神的,0.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值