Spring学习第三章

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方法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值