转载

Spring学习Day1

1.IOC为反转控制,是一种设计思想,可以直接将其理解为一个容器,这个容器可以帮你管理所有的组件,以前创建对象需要手动的new,在Spring中拿对象只需要直接从容器中取出。

实现方式:
private ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml");//可理解为获取IOC容器
Object bean = ioc.getBean("XXX");根据组件ID从IOC容器中取值。

2.IOC容器中的所有组件都在xml中进行注册配置。为对象赋值有三种方式:

Setter方法注入:

1.简单数据类型。

1. 用property赋值.
<bean id="Student" class="com.Ioctest.Student">
    <property name="StudentName" value="小明">
    <property name="Age" value="18">
</bean>
2.使用p名称空间赋值,注意需要导入p名称空间.
<bean id="Student" class="com.Ioctest.Student"
p:age="18"  p:StudentName="小明" >
</bean>
3.parent继承。等同于子类父类。
<bean id="StudentParent" class="com.Ioctest.Student" abstract="true">
    <property name="StudentName" value="小三"></property>
    <property name="Age" value="20"></property>
</bean>
<bean id="StudentChild" class="com.Ioctest.Student" parent="StudentParent">
    <property name="StudentName" value="小四"></property>
    //继承后可以对任意值进行修改。
</bean>
      

//切记!!!property中的name一定要和Setter方法后的名字相匹配。如该配置的Set方法应该是  public void SetStudentname()

2.list类型。

针对实体类中的list和Map集合,Spring有<list></list>和<Map></Map>标签。例如:假设Student实体类下有Private List<Teacher> teachers。则配置代码应为:

<bean id="Teacher02" class="com.Ioctest.Teacher">
    <property name="Teachername" value="张老师">
    </property>
    <property name="Age" value="44">
    </property>
    <property name="salary" value="#{5000*12}">             </property>
</bean>
//#{}功能强大,可以在里面写运算符,bean属性值,调用静态方法或非静态方法
<bena id="Student" class="com.Ioctest.Student">
<property name="teachers">
<list>
    <bean class="com.Ioctest.Teacher">
    <property name="Teachername" value="王老师">
    <property name="Age" value="32">
    </bean>
    <bean class="com.Ioctest.Teacher" ref="Teacher02">//ref可以引用外部bean。
    <bean class="com.Ioctest.Teacher"value="#{Teahcer02}>//#{}用于引用外部bean
</list>
</property>
</bean>

3. Map类型

假设Student实体类中有private Map<String, Object> maps,则配置代码应为:

<bean id="Student" class="com.Ioctest.Student">
    <property name="maps">
        <map>
            <entry key="key1" value="张三"></entry>
            <entry key="key2">
                <bean class="com.Ioctest.Teacher">
                    <property name="Teachername" value="王老师">                 </property>
                </bean>
                </entry>
                <entry key="Name">
                <value>芜湖</value>
                </entry>
                //<entry>代表一个键值对
        </map>
    </property>
</bean>

构造器法注入:

<bean id="Student2" class="com.Ioctest.Student">
    <constructor-arg name="StudentName" value="小明"></constructor-arg>
    <constructor-arg name="gender" value="男" index="2"></constructor-arg>
    <constructor-arg name="age" value="18" type="java.lang.Integer"></constructor-arg>
</bean>
//注意使用构造器赋值时,实体类中一定要有带参构造器。赋值顺序要参照构造器参数位置。如果想不按顺序可以如代码所示用index=?进行指引。如果希望进行重载,可以用type="java.lang.Integer"进行重复赋值。

@Autowired自动注入:

<bean id="Student" class="com.IocTest.Student" autowire="byType/byName/constructor">
    //byType/byName/constructor分别对应着通过类型,名字,构造器引入。
    </bean>

注解注入

依赖注入配合@AutoWired是最常用的注入方式,依赖注入只需在xml文件中配置一句需要扫描包的前缀

<context:component-scan base-package="com.IocTest"></context:component-scan>

然后通过@Controller、@Service、@Repository、@Component四种方式进行组件注入。

引用外部文件

引用外部文件最常用的就是jdbc配置文件的撰写。

外部文件dbconfig.properties

jdbc.username=root
jdbc.password=123456
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test
jdbc.driverClass=com.mysql.jdbc.Driver
<context:property-placeholder location="classpath:dbconfig.properties"/>//引入外部文件

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
    </bean>
   //${}可以取出文件中对应的值
原文  https://segmentfault.com/a/1190000022075038
正文到此结束
Loading...