1.bean的作用域:singleton prototype,默认是单例,如果设置为多例:可以使用bean的scope属性,值为prototype;
<bean id ="" class="" scope=""/>
2.bean的延迟加载:
默认bean立即加载。加载配置文件,实例化bean对象;
当需要延迟加载对象时,使用以下方式设置
3.IOC(重点)控制反转;。。。。。
4.DI 依赖注入:
两种方式:set方法依赖注入(建议)构造方法依赖注入
<bean id="" class="">
<property name="属性名" ref="已经创建好的id名"/>
</bean>
<bean id="" class="">
<constructor-arg index="参数的索引" ref=""/>
</bean>
5.自动装配(了解):byName/byType
<bean id="" class="" autowire="byName/byType"/>
6.赋值(基本数据类型和字符串,集合list,set,map,properties)
<property name="" value=""/>
<property name="like" >
<list>
<value>xxxx</value>
</list>
</property>
<property name="like" ref="listId"/>
<util:list id="listId">
<value>xxxx</value>
</util:list>
#读取外部的属性文件
在src/main/resources文件夹下,定义db.properties
内容
url=jdbc:mysql://localhost:3306/db
driverClassName=com.mysql.jdbc.Driver
username=root
password=root
<!-- 读属性文件
1.id表示读取属性文件的唯一名字
2.location表示要读取的配置(属性)文件的位置
classpath:表示在类路径下(resoures文件夹)
-->
<util:properties id="dbConfig"
location="classpath:db.properties"/>
开发步骤
1.创建maven工程
1)创建maven工程
2)添加web.xml
3) 添加Tomcat运行环境
4)添加jar spring-webmvc,junit,
commons-dbcp,mysql
5) application.xml
#Spring的表达式 BasicDataSource
EL表达式${},集合jstl标签库(核心标签库 c:)
Spring的表达式#{}
#基于注解的方式管理bean
实例化对象有两种方式:一种通过配置文件,一种使用注解
1.注解扫描
新建包cn.tedu.dao;spring 对包下边类进行扫描,扫描到的包中的类交给Spring容器进行管理。
<context:component-scan
base-package="cn.tedu.dao"/>
2.完成创建对象功能的注解
@Component:通用的注解
@Controller:控制器创建对象
@Service:业务层创建对象
@Repository:持久层创建对象的
练习:
//@Repository创建持久从对象
//默认的id名是类名的第一个字母小写
@Repository
public class UserDao{
public void insertUser(){
System.out.println("添加成功");
}
}
获取UserDao的对象可以使用以下方式获取
ac.getBean("userDao");
小结:
开发步骤:
1.创建工程(略)
2.在配置文件中添加注解扫描的配置
<!-- 注解扫描 -->
<context:component-scan base-package="cn.tedu.dao"/>
3.创建类,在类上添加注解(能实例化的注解)
//@Repository表示实例化持久层对象
//默认id的值:类名的第一个字母 小写(userDao)
@Repository
public class UserDao {
public void insertUser(){
System.out.println("添加成功!");
}
}
4.测试
@Test
public void testDao(){
//1.
AbstractApplicationContext ac =
new ClassPathXmlApplicationContext(
"application.xml");
//2.
UserDao userDao =
ac.getBean("userDao",UserDao.class);
//3.
userDao.insertUser();
//4.
ac.close();
}
#使用注解管理bean:
##1.bean的生命周期
//@Component实例化BeanLife对象
//@Component("beanLife")表示给bean对象起名,
//等价于bean标签中的id属性值<bean id="" .../>
@Component("beanLife")
public class BeanLife {
public BeanLife(){
System.out.println("BeanLife");
}
//@PostConstruct定义初始化方法的注解
//@PostConstructs是tomcat运行环境依赖的jar包
@PostConstruct
public void init(){
System.out.println("init");
}
//做业务的方法
public void execute(){
System.out.println("execute");
}
//@PreDestroy表示定义销毁的方法
//@PreDestroy也是Tomcat提供的注解
@PreDestroy
public void destroy(){
System.out.println("destroy");
}
}
##2.bean的作用域
//@Scope("prototype")表示用来设置bean的作用域;
//prototype表示多例,默认单例
@Component
@Scope("prototype")
public class DemoScope {
}
##3.bean的延迟加载
//@Lazy(true)表示对象延迟加载
@Component
@Lazy(true)
public class DemoLazy {
public DemoLazy(){
System.out.println("DemoLazy");
}
}
#依赖注入(DI)
##1.Resource(建议使用)
//1.@Resource表示给成员变量赋值,依赖注入
//2.@Resource使用此注解,可以省略set方法
//3.@Resource默认按名称(属性名)依赖注入(byName)
//4.如果名称不同,那么类型依赖注入(byType)
//5.@Resource(name="userDao1")找到相同名字的对象
@Service
public class UserService {
@Resource(name="userDao1")
private UserDao userDao;
public void addUser(){
userDao.insertUser();
}
}
##2.AutoWired(了解)
//1.@Autowired表示依赖注入
//2.@Autowired默认按照类型(byType)
//3.如果使用属性名进行依赖注入,
//必须使用@Qualifier协助完成,
//@Qualifier("userDao1")"userDao1"表示属性名
//4.@Qualifier实现依赖注入的时候,不能单独使用。
@Service
public class UserService2 {
@Autowired
@Qualifier("userDao1")
private UserDao userDao;
public void addUser(){
userDao.insertUser();
}
}
##@Value(了解)
config.properties
name=Admin
@Component
public class User{
@Value("#{config.name}")
private String name;
public void printName(){
System.out.println(name);
}
}
总结:
1.实例化对象,依赖注入有两种方式:配置文件,注解
2.注解扫描:在配置文件中,配置一下代码
<context:component-scan base-package="xx.xx"/>
3.4个实例化对象的注解
@Component通用注解
@Controller实例化控制器类
@Service实例化业务层
@Repository实例化持久层
4.DI
@Resource
1)默认按照属性名依赖注入
2)如果属性名匹配不上,使用类型依赖注入
3)@Resource(“属性名”)按照属性名依赖注入
5.了解的注解
@PostConstruct
@PreDestroy
@Lazy
@Scope
@Autowired
@Qualifier
@Value
练习:
abstract Animal定义类:
类体{
public abstract void showInfo();
}
Cat和Dog
public class Cat{
private String name;
public void showInfo(){
...("xx.xx.xx"+name);
}
}
Dog类同上
public Class Person{
private Animal a;
public void handler(){
a.showInfo();
}
}
要求:1.a要求实例化类型为cat;
2.在Cat和Dog类中给name依赖注入
3.实例化Person对象,调用handler方法