ioc的注解开发
xml开发与ioc开发的优缺点
xml管理bean比较容易,但配置麻烦
使用ioc注解就比较难管理,的到类内部去看具体的注解,但操作简单
一般都是两种结合一起开发
使用之前
必须添加约束之类的,直接贴代码吧
<?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是约束-->
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描,加上才能用ioc注解-->
<context:component-scan base-package="ioc的注解开发"/>
</beans>
常用到的注释
@Component(id)加载类的前面,与此相似的还有
@Controller :加在WEB 层
@Service :业务层
@Repository :持久层
@Component("user")
@Scope("singleton")
/*
* 相当于在xml配置bean即
* <bean id="user" class="ioc的注解开发.userDao" />
* */
public class userDao {
private String name;
public userDao() {
}
public userDao(String name) {
this.name = name;
}
@PostConstruct
public void init(){
System.out.println(name+"被初始化");
}
@PreDestroy
public void destory(){
System.out.println(name+"被销毁");
}
public String getName() {
return name;
}
@Value("鲁班七号") //赋值
public void setName(String name) {
this.name = name;
}
public void save() {
System.out.println("在user里执行了save");
}
}
@Scope
指定bean的作用范围(默认singleton,还有prototype,session…)
@PostConstruct 指定bean的初始化
@PreDestroy 指定bean的销毁方法
类的属性依赖注入(可以省去set方法)
对于变量使用
@Value(value)
对于对象
@Resource(相当于@Qualifier+@Autowired ) 注解默认按名称装配。名称 可以通过name属性指定,如果没有指定name属性,
默认取属性的名称作为bean名称寻找依赖对象
@Qualifier(“user”) 和@Autowired配合使用 指定名称
@Autowired 指定类型
测试一下吧
下面是代码
package ioc的注解开发;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
/**
* Created by Administrator on 2018/10/6.
*/
@Controller("user2")
public class userDao2 {
@Resource(name="user")
private userDao user;
public void save(){
System.out.println("在user2里执行了save");
user.save();
}
}
测试代码
package ioc的注解开发;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import javax.annotation.Resource;
/**
* Created by Administrator on 2018/10/5.
*/
public class testDemo {
@Test
public void testDemo1(){
ClassPathXmlApplicationContext apc=new ClassPathXmlApplicationContext("/ioc的注解开发/test.xml");
userDao user= (userDao) apc.getBean("user");
System.out.println(user.getName());
apc.close();
}
@Test
public void testDemo2(){
/*
@Resource相当为属性指定了依赖,Spring会自动为user注入依赖
*/
ClassPathXmlApplicationContext apc=new ClassPathXmlApplicationContext("/ioc的注解开发/test.xml");
userDao2 user2= (userDao2) apc.getBean("user2");
user2.save();
apc.close();
}
}
运行testDemo()
还没有评论,来说两句吧...