一、spring依赖注入的方式
1.通过set方式
<bean id="hello" class="com.zhiyou100.cyf.bean.Hello" autowire="byType"> <property name="name" value="${hello.name}"></property> <property name="age" value="${hello.age}"></property> </bean>
2.通过构造方法
<bean id="hello2" class="com.zhiyou100.cyf.bean.Hello"> <constructor-arg index="0" value="辽宁" /> <constructor-arg index="1" value="1" />
二、依赖注入的数据类型
1.基本数据类型和字符串 使用value
2.如果是指向另一个对象的引用,使用ref
<!-- 。管理类:类的创建以及属性的注入 bean:表示管理的类标签 class:具体的类 id:标注该标签 property中 如果属性为:Sting及基本类型或包装类,用value 如果属性为:其他对线,用ref --> <bean id="mysql" class="com.zhiyou100.cyf.dao.MysqlUserDao"/> <bean id="oracle" class="com.zhiyou100.cyf.dao.OracleUserDao"/> <bean id="s" class="com.zhiyou100.cyf.service.Service"> <property name="mdao" ref="mysql"></property> </bean>
3.如果注入的属性为list类型,见图片,在property中有list标签,里面
4.如果注入的为map类型,property或constructor中有map标签,其中的每个entry的键和值都可以为bean
<bean id="hello2" class="com.zhiyou100.cyf.bean.Hello"> <constructor-arg index="0" value="辽宁" /> <constructor-arg index="1" value="1" /> <constructor-arg index="2"> <map> <entry key="1" value-ref="stu1"> </entry> <entry key="2" value-ref="stu2"> </entry> <entry key="3" value-ref="stu3"> </entry> </map> </constructor-arg> </bean> <bean id="stu1" class="com.zhiyou100.cyf.bean.Student"> <property name="address" value="北京"></property> </bean> <bean id="stu2" class="com.zhiyou100.cyf.bean.Student"> <property name="address" value="南京"></property> </bean> <bean id="stu3" class="com.zhiyou100.cyf.bean.Student"> <property name="address" value="上海"></property> </bean>
三、bean的作用域
其默认为单例模式
可以修改为原始模式,设置bean的属性scope为prototype
<bean id="student" class="com.zhiyou100.cyf.bean.Student" scope="prototype"> <property name="address" value="${user.name}"></property> </bean>
四、自动注入。可以设置bean的autowire属性为byType或byName
byType:根据该类的属性类型来自动为它注入相应的对象
byName:根据bean的id寻找该类的属性名并且为其注入相应的对象
<bean id="userController" class="com.zhiyou100.cyf.controller.UserController" autowire="byType"></bean>
另外可以在头标签设置默认注入方式
default-autowire="byName"
五、在spring配置文件中引入属性文件。与springmvc类似,引入的方式
<!-- 。如果要引入多个文件,则用逗号 , 分隔classpath:mo.properties 这是spring2.5版本以后的写法,之前写法为 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:config.properties"></property> </bean> --> <context:property-placeholder location="classpath:config.properties"/>
注意,属性文件的部分key可能会与系统变量名重合,如user.name
六、使用注解的方式
1.再引入aop的 jar包
2.配置文件中使用包扫描
<context:component-scan base-package="com.zhiyou100.cyf"></context:component-scan>
3.在相应的类加上注解
@Repository 持久化注解。
@Service 业务层注解
@Controller 控制层注解
这些均相当于在配置文件中注册bean
下面是在需要注入的属性上使用
@Autowired 自动注入 按照类型帮你自动注入,如果由多个类型相同的那么就会在按照名称注入。(建议使用这个)
@Resouce 自动注入 按照名称注入,如果没有相同名称的bean那么会按照类型帮你注入。 它可以指定名称来注入。
resource中的属性更多 name属性可以与byName配合,不用本身的属性名
controller代码
@Controller(value="userController")//设置id public class UserController { @Autowired private UserService userService; public void selectById(int id) { userService.selectById(id); } }
service代码
@Service public class UserServiceImp implements UserService{ @Autowired private UserDao userDao; @Override public void selectById(int id) { userDao.selectById(id); } }
dao代码
@Repository public class UserDaoImp implements UserDao{ @Override public void selectById(int id) { System.out.println("根据id查询"+id); } }