<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> <!--开启注解扫描,包含属性注入标签的开启--> <context:component-scan base-package="com.imooc"/>
public class SpringDemo1 { @Test public void demo1(){ ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService=(UserService) applicationContext.getBean("userService"); String s=(String)userService.sayHello("张三"); System.out.println(s); }
/** * Spring的Bean管理的注解方式: * 传统方式需要去XML中配置<bean id="" class=""></bean> */ @Service("userService") public class UserService { public String sayHello(String name){ return "Hello"+name; }
===========属性注入==============
/** * Spring的Bean管理的注解方式: * 传统方式需要去XML中配置<bean id="" class=""></bean> */ @Service("userService") public class UserService { @Value("米饭") private String something; public String sayHello(String name){ return "Hello"+name; } public void eat(){ System.out.println("eat:"+something); }
@Test public void demo2(){ ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService=(UserService) applicationContext.getBean("userService"); userService.eat(); }
提示:如果使用注解注入属性值,可以不用set方法。但如果有,注解也可加载set方法上。
注入对象
@Repository("userDao") public class UserDao { public void save(){ System.out.println("DAO中保存用户..."); } }
@Service("userService") public class UserService { /* @Autowired @Qualifier("userDao")*/ @Resource(name="userDao") private UserDao userDao; public void save(){ System.out.println("Service中保存用户的方法"); userDao.save(); }
@Test public void demo3(){ ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService=(UserService) applicationContext.getBean("userService"); userService.save(); }
=========spring注解式,初始化、销毁操作===================
@Component("bean1") public class Bean1 { @PostConstruct public void init(){ System.out.println("initBean..."); } public void say(){ System.out.println("say..."); } @PreDestroy public void destory(){ System.out.println("destoryBean..."); } }
@Test public void demo1(){ ClassPathXmlApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); Bean1 bean1=(Bean1) applicationContext.getBean("bean1"); bean1.say(); applicationContext.close(); }
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> <!--开启注解扫描,包含属性注入标签的开启--> <context:component-scan base-package="com.imooc"/>
==========注解的作用范围================
@Component("bean2") @Scope("prototype") public class Bean2 { }
@Test public void demo2(){ ClassPathXmlApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); Bean2 bean1=(Bean2) applicationContext.getBean("bean2"); Bean2 bean2=(Bean2) applicationContext.getBean("bean2"); System.out.println(bean1==bean2); }
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> <!--开启注解扫描,包含属性注入标签的开启--> <context:component-scan base-package="com.imooc"/>
==========XML管理BEAN,注解注入属性(混合管理)=========
public class ProductService { @Resource(name = "categoryDao") private CategoryDao categoryDao; @Resource(name = "productDao") private ProductDao productDao; public void save(){ System.out.println("ProductService的save方法执行了..."); categoryDao.save(); productDao.save(); } public CategoryDao getCategoryDao() { return categoryDao; } public void setCategoryDao(CategoryDao categoryDao) { this.categoryDao = categoryDao; } public ProductDao getProductDao() { return productDao; } public void setProductDao(ProductDao productDao) { this.productDao = productDao; } }
public class ProductDao { public void save(){ System.out.println("ProductDao的save方法"); } }
public class CategoryDao { public void save(){ System.out.println("CategoryDao的save方法"); } }
public class SpringDemo3 { @Test public void demo1(){ ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml"); ProductService productService=(ProductService) applicationContext.getBean("productService"); productService.save(); } }
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --> <!--开启注解扫描,包含属性注入标签的开启--> <!--<context:component-scan base-package="com.imooc"/>--> <!--属性注入标签,无需在注入类上加上 Compentent等标志--> <context:annotation-config/> <bean id="productService" class="com.imooc.demo3.ProductService"> <!--<property name="productDao" ref="productDao"/>--> <!--<property name="categoryDao" ref="categoryDao"/>--> </bean> <bean id="categoryDao" class="com.imooc.demo3.CategoryDao"/> <bean id="productDao" class="com.imooc.demo3.ProductDao"/> </beans>
提示:<context:annotation-config/>是包含<context:annotation-config/>的。后者只是管理属性的注入,不包括controller等的扫描。