一、component标签的特点:
扫描com.jd包及其子包下的所有类,并未添加了@Controller@Service@Component@Repository修饰的类创建对象并存入
容器,调用的是默认无参构造方法。
二、用代码验证component标签的特点
编写一个UserInfoDao类,和一个Test类:
import org.springframework.stereotype.Service;
@Service//加@Service注释
public class UserInfoDao implements IUserInfoDao {
public UserInfoDao(){
System.out.println("无参构造方法");
}
}
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.jd.vo.Student;
import com.jd.vo.UserInfo;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
UserInfo userInfo = applicationContext.getBean(UserInfo.class);
}
}
XML文件做如下配置:
<?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"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
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-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<!--
@controller@service@component@repository修饰的类的成员变量有@Autowired修饰,则自动给该属性赋值(前提是在ioc容器中有配置)
-->
<context:component-scan base-package="com.jd"></context:component-scan>
</beans>
运行结果如下:
若UserInfoDao类中只有有参构造方法,则报错。
修改UserInfoDao类:
import org.springframework.stereotype.Service;
@Service
public class UserInfoDao implements IUserInfoDao {
public UserInfoDao(String param){
System.out.println("有参构造方法");
}
}
特别注意这里:
另外:
当@Controller@Service@Component@Repository修饰的类的成员变量有@Autowired修饰,则自动给该属性赋值(前提是
在ioc容器中有配置)
对UserInfoDao类,Test类,XML文件均作修改:
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserInfoDao implements IUserInfoDao {
@Autowired
public Date date;
public UserInfoDao(){
}
}
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.jd.userInfo.dao.UserInfoDao;
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
UserInfoDao userInfoDao = applicationContext.getBean(UserInfoDao.class);
System.out.println(userInfoDao.date);
}
}
<?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"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
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-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="date" class="java.util.Date"></bean><!--配置Bean-->
<context:component-scan base-package="com.jd"></context:component-scan>
</beans>
运行Test类,观察结果:
得以验证。