一般情况下,我们会在xml文件定义bean和component,spring有了自动扫描可以不用再xml文件中写bean和component。
下面,我通过一个简单实例来演示。
用xml文件的方法:
CustomerDao.java
package com.lzyer.springel.dao;
import org.springframework.stereotype.Component;
public class CustomerDao {
@Override
public String toString() {
return "This is Customer Dao";
}
}
CustomerService.java
package com.lzyer.springel.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.lzyer.springel.dao.CustomerDao;
public class CustomerService {
private CustomerDao customerDao;
public CustomerDao getCustomerDao() {
return customerDao;
}
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
@Override
public String toString() {
return "CustomerService [customerDao=" + customerDao + "]";
}
}
bean.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="customerDao" class="com.lzyer.springel.dao.CustomerDao"></bean>
<bean id="customerService" class="com.lzyer.springel.service.CustomerService">
<property name="customerDao" ref="customerDao"></property>
</bean>
</beans>
使用注解自动扫描的方式:
CustomerDao.java
package com.lzyer.springel.dao;
import org.springframework.stereotype.Component;
@Component
public class CustomerDao {
@Override
public String toString() {
return "This is Customer Dao";
}
}
CustomerService.java
package com.lzyer.springel.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.lzyer.springel.dao.CustomerDao;
@Component
public class CustomerService {
@Autowired
private CustomerDao customerDao;
public CustomerDao getCustomerDao() {
return customerDao;
}
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
@Override
public String toString() {
return "CustomerService [customerDao=" + customerDao + "]";
}
}
bean.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.lzyer.springel"></context:component-scan>
<!--
<bean id="customerDao" class="com.lzyer.springel.dao.CustomerDao"></bean>
<bean id="customerService" class="com.lzyer.springel.service.CustomerService">
<property name="customerDao" ref="customerDao"></property>
</bean>
-->
</beans>
测试类:
package com.lzyer.springel;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lzyer.springel.service.CustomerService;
public class ServiceAndDaoTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"bean.xml"});
CustomerService cs = (CustomerService)context.getBean("customerService");
System.out.println(cs);
}
}
结果:
参考资料:http://www.mkyong.com/spring/spring-auto-scanning-components/