步骤:
//name:spring创建对象的名称 class:对应实体类的全类名
<bean name="user" class="">bean>
测试代码:
//创建容器
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中取出对象
User u = ac.getBean("user")
/*
name:spring创建对象的名称
class:对应实体类的全类名
scope:
singleton(默认值):创建单例对象,在spring容器中只会存在一个实例
prototype:多例原型,每次再获得时才会被创建,而且每次得到的对象都是新的
init-method(填初始化方法的方法名):spring会在对象创建后立即调用该方法
destory-method(填销毁方法的方法名):在spring容器关闭并销毁所有对象前调用该方法
*/
//resource:另一个xml配置文件的路径
//值类型注入
//将User对象中名为name的属性值赋值为张三
//引用类型注入
//将对象名为car的对象赋值给User对象中的Car类型的引用变量
/*
name:构造函数的函数名
index:构造函数的参数索引
type:参数类型
*/
Tom
jery
com.jdbc.mysql.Driver
//指定扫描cn.itcast.bean包下的注解
//注意:扫描包时,会自动扫描指定包的子孙包
//四个注解效果一样
@Component("user")
//@Service("user1") service层注解
//@Controller("user2") web层注解
//@Repository("user3") dao层注解
@Scope(scopeName="prototype")//指定对象作用范围
public class User {
@Value("tom") //通过反射的Field赋值,破坏了封装性
private String name;
private Integer age;
//@Autowired //自动装配
//问题:如果匹配多个类型一致的对象,将无法选择注入哪一个对象
//@Qualifier("car")//使用Qualifier注解告诉spring容器自动装配哪个名称的对象
@Resource(name="car")//手动注入
private Car car;
@Value("tom") //通过set方法赋值
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setCar(Car car) {
this.car = car;
}
@PostConstruct //初始化方法,在对象被创建后调用
public void init(){
System.out.println("我是初始化方法");
}
@PreDestroy //销毁方法,在销毁之前调用
public void destory(){
System.out.println("我是销毁方法");
}
}
//帮我们创建容器
@Runwith(SpringJunit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext.xml");
@Test
public void fun(){
}
#Spring中的AOP演示.
public class UserServiceImpl implements UserService {
@Override
public void add() {
System.out.println("添加");
}
@Override
public void delete() {
System.out.println("删除");
}
@Override
public void update() {
System.out.println("更新");
}
@Override
public void find() {
System.out.println("查找");
}
}
public class MyAdvice {
public void before(){
System.out.println("这是前置通知");
}
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("这是环绕通知的前半部分");
pjp.proceed();
System.out.println("这是环绕通知的后半部分");
}
public void after(){
System.out.println("这是after后置通知");
}
public void afterRunning(){
System.out.println("这是afterRunning后置通知");
}
public void afterException(){
System.out.println("出现异常了");
}
}
@Aspect //表示该类是一个通知类
public class MyAdvice {
@Pointcut("execution(* cn.itcast.service.*ServiceImpl.*(..))")
public void pc(){};
@Before("MyAdvice.pc()")
public void before(){
System.out.println("这是前置通知");
}
@Around("MyAdvice.pc()")
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("这是环绕通知的前半部分");
pjp.proceed();
System.out.println("这是环绕通知的后半部分");
}
@After("MyAdvice.pc()")
public void after(){
System.out.println("这是after后置通知");
}
@AfterReturning("MyAdvice.pc()")
public void afterRunning(){
System.out.println("这是afterRunning后置通知");
}
@AfterThrowing("MyAdvice.pc()")
public void afterException(){
System.out.println("出现异常了");
}
}
事物的传播行为:选择PROPAGATION_REQUIRED(支持当前事物,如果不存在就新建一个)即可。
Spring整合jdbc事物
dao实现类(继承JdbcDaoSupport类)
public class AccountUserDaoImpl extends JdbcDaoSupport implements AccountUserDao {
public void increase(Integer id,double money) {
String sql="update account set money=money+? where id=?";
//直接调用父类中的getJdbcTemplate方法得到jdbc模板对象,然后调用模板对象中的方法操作数据库
getJdbcTemplate().update(sql, money,id);
}
public void decrease(Integer id,double money) {
String sql="update account set money=money-? where id=?";
getJdbcTemplate().update(sql, money,id);
}
}
service实现类
public class AccountServiceImpl implements AccountService {
private AccountUserDao accountDao;
public void transfer(final Integer form, final Integer to, final double money) {
accountDao.decrease(form, money);
accountDao.increase(to, money);
}
public void setAccountDao(AccountUserDao accountDao) {
this.accountDao = accountDao;
}
}
xml配置文件
使用注解配置jdbc事物:
xml文件
service实现类
//可以将注解配置到类上,对类中的所有方法都起作用,若类中某一方法的配置有所不同,可以在此方法上重写一个仅对此方法有用的配置
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
public class AccountServiceImpl implements AccountService {
private AccountUserDao accountDao;
public void transfer(final Integer form, final Integer to, final double money) {
accountDao.decrease(form, money);
accountDao.increase(to, money);
}
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=true)
public User get(int id){
User u=accountDao.get(id);
}
public void setAccountDao(AccountUserDao accountDao) {
this.accountDao = accountDao;
}
}