发表于: 2018-04-20 23:35:11
1 554
今日完成:
在完成jdbc和spring和整合过程中发现很多标签和属性值不太理解,导致最后没能完成,尝试了很长时间,也找不到原因。便后头看了一下spring的基础知识点。一些知识进行总结。
spring通过对bean的管理实现依赖注入。
通俗点说,spring对bean,进行管理时,创建对象不需要new代码的出现,而是交给spring进行完成。通过这个功能完成类文件间的互相关联。
例如我们在dao的测试类里常出现的:
Interface a =new Implement();
a.Select(user);
在这里接口和实现类的功能交织在一起,并没能完全分离,而我们引入结口的便是为了,让实现功能尽量依赖抽象类而不依赖具体的实现类。
spring对bean进行管理主要通过两种方式:
1.使用配置文件方式实现;
2.使用注解方式实现;
通过配置文件实例化bean对象共有三种方式,
1.1无参构造
创建对象时,调用类中的无参构造函数,在xml文件中使用方式
<bean name="c" class="spring.pojo.Category">
无参构造
<property name="name" value="category 1" />
</bean>
1.2使用静态工厂
在前面的mybatis整合中,定义连接池是用的便是这种方法(了解即可)
创建一个工厂类,在工厂类中提供一个静态方法,这个方法返回类的对象;调用工厂类的方法时候,直接使用 类名.方法名 即可调用。
1.3使用实例工厂
与静态工厂的不同,即是工厂类中提供的普通方法。(了解即可)
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method = "close" >
1.4.spring配置文件中bean标签常用的属性
1.4.1.id属性:根据id属性值得到配置对象。
在spring配置文件中会有多个bean标签,但id属性值不能相同,具有唯一性(id属性值约束:唯一),名字必须以字母开头,不能含有特殊符号。
1.4.2class属性,要创建对象类的全路径。
1.4.3scope属性:bean的作用范围。
singleton:创建的对象是单例的,也是scope属性的默认值。
prototype:创建的对象是多实例的。
globalSession:用在单点登录(即SSO,single sign on)上
1.4name属性:name属性的功能和id属性是一样的。name属性和id属性区别是:在id属性值里面不能有特殊符号,在name属性值里面可以添加特殊符号。
Spring中Bean的属性注入
构造方法的方式注入属性
set方法的方式注入属性
Spring的属性注入:对象类型的注入
<property name="configLocation" value="classpath:mybatisconfig/SqlMapConfig.xml"/>
<!--指定数据源,这里的ref(引用)上文的dataSource的路径-->
<property name="dataSource" ref="dataSource"/>
value 赋值,简单类型 ;ref 引用,复杂类型,对象
jdbcTemplate的使用
@Transactional
@Repository
public class UserImplet implements UserService {
private JdbcTemplate jdbcTemplate;
@Resource
public void setDataSource(DataSource dataSource){
this.jdbcTemplate=new JdbcTemplate(dataSource);
}
@Override
public void St_info_Insert(User user) {
jdbcTemplate.update(
"INSERT INTO st_info(id,name,age)VALUE (?,?,?)",
new Object[]{user.getId(),user.getName(),user.getAge()},
new int[]{Types.INTEGER,Types.VARCHAR,Types.INTEGER}
);
}
明日计划:
数据库操作功能的完善
困难:
spring注解式,自动扫描功能没有成功启用;待解决
收获:
学习了spring的bean管理
评论