没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
我的
je
博客
:
http://86asm.javaeye.com/
http://86asm.javaeye.com/
文章错误之处肯请大家留言指正
,
再此谢过
。
文章编排目录结构
,
大家可以在文档结构图下很方便地查看
1
一
、
理论知识
1.
依赖注入
、
控制反转
依赖注入
:
在运行期
,
由外部容器动态地将依赖对象注入到组件中
控制反转
:
应用本身不负责依赖对象的创建及维护
,
依赖对象的创建及维护是由外部窗口负
责得
。
这样控制权就由应用转移到了外部容器
,
控制权的转移就是所谓的反转
。
2.
spring
的主要特性
。
(
1
)
降低组件之间的耦合度
,
实现软件各层之间的解耦
。
(
2
)
可以使用容器提供的众多服务
,
如
:
事务管理服务
、
消息服务
、
JMS
服务
、
持久化服
务等等
。
(
3
)
容器提供单例模式支持
,
开发人员不再需要自己编写实现代码
。
(
4
)
容器提供了
AOP
技术
,
利用它很容易实现如权限拦截
,
运行期监控等功能
。
(
5
)
容器提供的众多辅作类
,
使用这些类能够加快应用的开发
,
如
:
JdbcTemplate
、
HibernateTemplate.
(
6
)
对
主流的应用框架提供了集成支持
。
3.
常用技术
控制反转
/
依赖注入
---
面向切入编程
---
与主流框架的整合
、
管理
---
二
、
基本
实例
1.
准备
搭建环境
dist
\
spring.jar
lib
\
jakata
-
commons
\
commons
-
loggin.jar
如果使用了切面编程
,
还需下列
jar
文件
:
lib
\
aspectj
\
aspectjweaver.jar
和
aspectjrt.jar
lib
\
cglib
\
cglib
-
nodep
-
2.1.3.jar
如果使用了
jsr
-
250
中的注解
,
还需要下列
jar
文件
:
lib
\
j2ee
\
common
-
annotations.jar
2.
搭建并
测试环境
建立名为
spring_01_base
项目
,
根据需求导入
jar
包
。
建立一个
Junit
测试单元
SpringEnvTest
,
测试代码如下
:
@Test
public
void
testEnv() {
ApplicationContext ct
x =
new
ClassPathXmlApplicationContext(
"beans.xml"
);
}
b
eans.xml
配置文件在此省略
(
见下
)
。
运行此测试如无错
,
则说明环境搭建成功
。
说明
:
beans.xml
可以在类路径下进行配置
,
也可以在具体的目录下配置
。
可以是一个配置文
件
,
也可以是多个配置文件组成
String
数组传入
。
3
.
实例
作如下准备工作
:(
1
)
建立
UseDao
接口
,
代码如下
:
package
com.asm.dao;
public
interface
UserDao {
void
save();
}
(
2
)
建立
UserDao
接口的实现类
,
UserDaoImpl
我的
je
博客
:
http://86asm.javaeye.com/
http://86asm.javaeye.com/
文章错误之处肯请大家留言指正
,
再此谢过
。
文章编排目录结构
,
大家可以在文档结构图下很方便地查看
2
package
com.asm.dao.impl;
import
com.asm.dao.UserDao;
public
class
UserDaoImpl
implements
UserDao{
public
void
save() {
System.
out
.println(
"
执行
save
方法
..."
);
}
}
(
3
)
在
src
目录下配置此
beans.xml
,
它的配置如下
:
<?
xml
version
=
"1.0"
e
ncoding
=
"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/sprin
g
-
beans
-
2.5.xsd"
>
<
bean
id
=
"userDaoImpl"
class
=
"com.asm.dao.impl.UserDaoImpl"
/>
</
beans
>
说明
:
bean
代表一个实质的
java
类
,
通过它的
id
可以获取一个此类的一个对象
。
补充
:
让
xml
配置文件在编译时提示
[windows][preferences][myeclipse][files and editors][xml][xml catalog]
点
add
,
在出现窗口的
location
中选
“
file system
”
,
然后在
spring
解压目录的
dist/resources
目录中选择
“
spring
-
beans
-
2.5.xsd
”
,
并将
key Type
值改为
“
Schema Location
”
,
key
值
为
:
http://www.springframework.org/schema/beans/spring
-
beans
-
2.5.xsd
(
4
)
Junit
测试单元
SpringEnvTest
中增加如下代码测试
:
@Test
public
void
base() {
ApplicationContext ctx =
new
ClassPathXmlApplicationContext(
"beans.xml"
);
UserDao userDao = (UserDao) ctx.getBean(
"userDao
Impl"
);
userDao.save();
}
以上的代码就是通过配置文件
beans.xml
获取所需要的实例对象
。
4.
三种
bean
的生成方式
除了上面使用的类直接生成方式
,
还有
bean
静态工厂及
bean
实例工厂
。
bean
静态工厂的配置如下
:
<
bean
id
=
"userDaoImpl2"
class
=
"com.asm.dao.impl.UserDaoImplFactory"
factory
-
method
=
"getUserDaoImpl"
/>
相应的工厂类代码如下
:
package
com.asm
.dao.impl;
public
class
UserDaoImplFactory {
public
static
UserDaoImpl getUserDaoImpl(){
return
new
UserDaoImpl();
}
}
bean
实例工厂的配置如下
:
<
bean
id
=
"factory"
class
=
"com.asm.dao.impl.UserDaoImplFactory2"
/>
我的
je
博客
:
http://86asm.javaeye.com/
http://86asm.javaeye.com/
文章错误之处肯请大家留言指正
,
再此谢过
。
文章编排目录结构
,
大家可以在文档结构图下很方便地查看
3
<
bean
id
=
"userDaoImpl3"
factory
-
bean
=
"factory"
facto
ry
-
method
=
"getUserDaoImpl"
/>
相应的工厂类的代码如下
:
package
com.asm.dao.impl;
public
class
UserDaoImplFactory2 {
public
UserDaoImpl getUserDaoImpl() {
return
new
UserDaoImpl();
}
}
5.
bean
的作用域
s
ingleton:
返回
bean
的同一个实例
,
也是默认的作用域
(
无状态
bean
使用此作用域
)
p
rototype:
每次请求都会创建一个实
例
(
有
状态
bean
使用此作用域
)
request
、
session
、
global session
这三个作用域主要用在
web
应用中
6.
bean
的生命周期
(1)
什么时候初始化
bean
实例
当
scope
=
singleton
,
即
默认
情况
,
会在装载配置文件时实例化
。
如果希望在调用
getBean
时才初始化
,
可以使用
lazy
-
init="true"
补充
:
如果希望希望该配置文件中的所有
bean
都延迟初始化
,
则应在
beans
根结点中使用
lazy
-
init="true"
。
当
scope=prototype
时
,
在调用
getBea
n()
方法时才会初始化
。
(
2
)
生命周期
:
构造器
、
init
方法
、
获取
bean
后的操作
、
destr
o
y
方法
(
ctx.close
、
注意
如果
bean
的
scope
设为
prototype
时
,
当
ctx.close
时
,
destroy
方法不会被调用
)
7.
属性
注入
Setter
方式
(
1
)
简单属性
(
如
String
)
:
<
bean
id
=
"userServiceBean"
class
=
"com.asm.service.UserServiceBean"
>
<
property
name
=
"id"
value
=
"10"
></
property
>
<
property
name
=
"username"
value
=
"
张某某
"
></
property
>
</
bean
>
(2)
对象
属性
-
外部
bean
注入
:
在上面的
<bean>
中增加如下配置
:
<
property
name
=
"userDao"
ref
=
"userDaoImpl"
/>
对象属性
-
内部
bean
注入
:
在上面的
<bean>
中增加如下配置
:
<
property
name
=
"userDao"
>
<
bean
id
=
"temp"
class
=
"com.asm.dao.impl.User
DaoImpl"
/>
</
property
>
(
3
)
集合
属性
注入
:
<
property
name
=
"list"
>
<
list
>
<
value
>
List
值一
</
value
>
<
value
>
List
值二
</
value
>
<
value
>
List
值三
</
value
>
</
list
>
</
property
>
<
property
name
=
"set"
>
我的
je
博客
:
http://86asm.javaeye.com/
http://86asm.javaeye.com/
文章错误之处肯请大家留言指正
,
再此谢过
。
文章编排目录结构
,
大家可以在文档结构图下很方便地查看
4
<
set
>
<
value
>
Set
值二
</
value
>
<
value
>
Set
值一
</
value
>
<
value
>
Set
值三
</
value
>
</
set
>
</
property
>
<
property
name
=
"map"
>
<
map
>
<
entry
key
=
"one"
value
=
"
一
"
/>
<
entry
key
=
"two"
value
=
"
二
"
/>
<
entry
key
=
"three"
value
=
"
三
"
/>
</
map
>
</
property
>
<
property
name
=
"pro"
>
<
props
>
<
prop
key
=
"p1"
>
first
</
prop
>
<
prop
key
=
"p2"
>
second
</
prop
>
<
prop
key
=
"p3"
>
third
</
prop
>
</
props
>
</
property
>
注意
:
在相应的字段上一定要有
setter
方法
,
才能注入
。
补充
:
使用继承
。
在
beans.xml
中的配置如下
:
<
bean
abstract
=
"true"
id
=
"parent"
>
<
property
name
=
"username"
value
=
"
张某某
"
></
property
>
</
bean
>
<
bean
id
=
"XXX"
class
=
"com.asm.vo.User"
parent
=
"parent"
>
<
property
name
=
"password"
value
=
"123456"
></
property
>
</
bean
>
相当于在
XXX bean
实例中也有
username
属性设置
。
8.
属性注入
构造器方式
<
bean
id
=
"userServiceBean2"
class
=
"com.asm.service.UserServiceBean"
>
<
constructor
-
a
rg
index
=
"0"
value
=
"
李某某
"
/>
<
constructor
-
arg
index
=
"1"
ref
=
"userDaoImpl"
/>
<
constructor
-
arg
index
=
"2"
>
<
list
>
<
value
>
List
值一
</
value
>
<
value
>
List
值二
</
value
>
<
value
>
List
值三
</
value
>
</
list
>
</
constructor
-
arg
>
</
bean
>
UserServiceBean
对应的构造方
法代码如下
:
我的
je
博客
:
http://86asm.javaeye.com/
http://86asm.javaeye.com/
文章错误之处肯请大家留言指正
,
再此谢过
。
文章编排目录结构
,
大家可以在文档结构图下很方便地查看
5
public
UserServiceBean(String username, UserDao userDao, Set<String> set)
{
this
.
username
=username;
this
.
userDao
=userDao;
this
.
set
=set;
}
注意
:
此方法会覆盖掉默认的构造方法
,
导致要依赖默认构造方法的配置不可用
,
因此我们还应
为此类提供一个默认的构造器
。
三
、
使用注解方式
注入
1.
准备
注解方式的注入主要针对对象属性的注入
。
使用注解功能要引用注解包
,
另
beans.xml
的配置模板如下
:
<?
xml
version
=
"1.0"
encoding
=
"UTF
-
8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema
-
instance"
xmlns:context
=
"http://www.springframework.org/schema/context"
xsi:schemaLocation
=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring
-
beans
-
2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring
-
context
-
2.5.xsd"
>
<
cont
ext:annotation
-
config
/>
<!
--
开启注解功能
--
>
</
beans
>
2.
Resource
注解
实例
拷贝上一个项目为
spring_0
2
_
annotation
项目
,
修改
UserServiceBean
为如下形式
:
package
com.asm.service;
public
class
UserServiceBean {
@
Resource
(name =
"userDaoImpl"
)
private
UserDao
userDao
;
private
UserDao
userDao2
;
@
Resource
public
void
setUserDao2(UserDao userDao2) {
this
.
userDao2
= userDao2;
}
public
void
test() {
userDao
.save();
userDao2
.save();
}
}
然后在
bean.xml
中的配置如下
:
<
bean
id
=
"userDaoImpl"
class
=
"com.asm.dao.impl.UserDaoImpl"
/>
<
bean
id
=
"userServiceBean"
class
=
"com.asm.
service.UserServiceBean"
/>
简要说明
:
Resouce
注解
可以在字段上标记
,
也可以在对应的
setter
方法上标记
。
此注解
可
以不使用
name
属性
,
它会自动去查找匹配的类型
(
先以字段名称为
name
的值查找
,
如找不到
剩余31页未读,继续阅读
hiltongu
- 粉丝: 14
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240509_034911_com.tencent.mtt.jpg
- 基于python实现的医学影像体脂分割+源代码+文档说明(课程设计)
- 基于python实现的医学影像(MIR, CT )图像分割源码+文档说明(高分课程设计)
- 基于python+JavaScript实现的医学影像分割+源代码+文档说明+截图演示+数据(高分毕业设计)
- 基于U-net+pytorch实现的医学影像分割python源码+文档说明+数据+界面截图+博客介绍
- 课程设计-基于Pytorch实现MNIST数据集的手写数字识别源码+数据(Gui界面)+文档说明+模型
- 软件开发国家标准.xls
- pytorch-CNN-SBATM-ubuntudemo
- matplotlibdemo
- pytorch-CNN-dht11温湿度传感器笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0