|
From: roger h. <apo...@sn...> - 2003-12-08 15:15:09
|
Colin,
A long delayed response, but just in case this topic may still be of
interest to you...
I played around with a couple of ways of doing this, & have attached a
straight forward implementation of the initial scheme that you first
outlined, ie: given the following:
public interface ITestBean_Factory1 {
ITestBean getInstance();
}
<bean id="testBean"
class="org.springframework.beans.TestBean">
<property ... >
</bean>
<bean id="testTypedFactoryBean1"
class="org.springframework.beans.factory.support.TypedFactoryBean">
<property name="interface">
<value>
org.springframework.beans.factory.support.ITestBean_Factory1
</value>
</property>
<property name="target">
<value>
testBean
</value>
</property>
</bean>
then a call to beanFactory.getBean("testTypedFactoryBean1") will return
dynamic proxy instance that implements the given typed factory interface.
FYI, the following is a short description of the 'other' approach I tried:
My first thought was that your initial scheme could be simplified by using
a factory-interface attribute on the target bean definition, & doing away
with the need to have a separate typed factory bean, ie:
<bean id="testBean"
class="org.springframework.beans.TestBean">
factory-interface"org.springframework.beans.factory.support.ITestBean_Factor
y1"
<property... >
</bean>
With a few tweaks in core classes, this all works fine - the only problem is
that it just doesn't feel clean enough, ie: it requires the following things
to change:
- new factory-interface bean definition attribute
- new behaviour for beanFactory.getBean("&beanName"), since the typed
factory dynamic proxy instance returned, will no longer reliably be an
instance of FactoryBean
- small, but none the less, additional complexity to AbstractBeanFactory,
one more level of indirection to contend with
On reflection, in this instance, end of idea ;)
I would be interested to know how you ended up actually dealing with the
issue in practice ?
Roger
"Colin Sampaleanu" <col...@ex...> wrote in message
news:3FB...@ex......
> I was thinking of the first, with the idea that there is no Spring class
> dependency, and you achieve total inversion of control.
>
> Your second option would work of course. It does achieve the IOC aspect,
> but doesn't remove the Spring (if the GenericFactory interface comes
> from Spring), and you would have to cast in the using bean instead of in
> the proxy. The IOC and hiding of other beans in the BF are probably the
> most important things anyway.
>
> (Of course, both of these do have a negative aspect, compared to just
> using BeanFactory directly; with BeanFActory the using bean can declare
> itself BeanFactoryAware and get the reference with no extra
configuration).
>
>
> roger holbrook wrote:
>
> >Hi Colin
> >
> >Your thoughts on implementation hiding have got me thinking...
> >
> >But before I test anything could you clarify the sort of usage you
> >have in mind - specifically, would it make a difference whether the
> >implementation hiding factories were themselves 'typed' or 'generic' ie.
do
> >you want / need the type of the factory to vary with the type that it
> >generates, or would a single generic factory be adequate ?
> >
> >In other words, does one or other of the following make a difference ?
> >
> >1. Typed interface factories:
> >
> >interface MyFirstInterfaceFactory {
> > MyFirstInterface getInstance()
> >}
> >
> >interface MySecondInterfaceFactory {
> > MySecondInterface getInstance()
> >}
> >
> >
> >2. Generic interface factory:
> >
> >interface GenericFactory {
> > Object getInstance()
> > Class getClass()
> >}
> >
> >where different instances of GenericFactory will return from getClass()
the
> >relevant type, MyFirstInterface, MySecondInterface etc..
> >
> >I'll try & test something tomorrow
> >
> >Roger
> >
> >
> >
> >"Colin Sampaleanu" <col...@ex...> wrote in message
> >news:3FB...@ex......
> >
> >
> >>I think I may be missing something, but I think it's desireable to be
> >>able to create in an easy fashion, 'closures' which encapsulate getting
> >>a bean from a bean factory.
> >>
> >>Say you have an interface
> >> interface MyInteface { ... whatever }
> >>
> >>and you have a factory Interface
> >> interface MyInterfaceFactory {
> >> MyInterface getInstance();
> >> }
> >>
> >>And you have a user of the factory, who you'd rather have no knowledge
> >>of Spring, which is why he's using the factory instead of calling
> >>getBean himself:
> >>class User {
> >> MyInterfaceFactory _myfac;
> >> public void setMyInterfaceFactory(MyInterfaceFactory myfac) { _myfac =
> >>myfac; }
> >> public void someMethod() {
> >> // need a new instance of MyInterface to work with
> >> MyInterface myint = _myfac.getInstance();
> >> ...
> >> }
> >>}
> >>
> >>Now I have a bean factory
> >><beans>
> >> <bean id="myinterface" singleton="false"
> >>class="com.whatever.MyInterfaceImpl">
> >> </bean>
> >> <bean id="user" class="com.whatever.User">
> >> <property name="myInterfaceFactory"><ref
bean="xxxxxxxx"/></property>
> >> </bean>
> >></beans>
> >>
> >>now, as per the above, context.getBean("myinterface") is already a
> >>factory for objects implementing MyInterface. But I don't want the User
> >>object to know anything about contexts. And I'd rather not create an
> >>actual object that implements MyInterfaceFactory. It seems like a waste,
> >>since all I am doing here is trying to create a level of indirection,
> >>and I already have a factory inside the context itself, and I may want
> >>to use this approach in 30 different places, just to add a level of
> >>indirection in creating new objects.
> >>
> >>So what I think is needed is some variation of ProxyFactoryBean (but a
> >>separate class), which given a target bean (which is itself a factory),
> >>and a factory interface having a method with no args which returns a
> >>certain type, creates on the fly a new class implementing the factory
> >>interface, which will just use the target factory bean to actually
> >>supply the instance. So the bean def above would become:
> >><beans>
> >> <bean id="myinterface" singleton="false"
> >>class="com.whatever.MyInterfaceImpl">
> >> </bean>
> >> <bean id="myinterface-factory"
> >>
> >>
> >class="org.springframework.whatever.XXXX">
> >
> >
> >> <property name="targetBean"><ref bean="xxxxxxxx"/></property>
> >> <property
> >>name="interface"><value>x.y.z.AFactoryInterface</value></property>
> >> </bean>
> >> <bean id="user" class="com.whatever.User">
> >> <property name="myInterfaceFactory"><ref
> >>bean="myinterface-factory"/></property>
> >> </bean>
> >></beans>
> >>
> >>Am I missing an existing way to do this? Is this worth adding to spring
> >>as a convenience built-in, along the lines of
TransactionProxyFactoryBean?
> >>
> >>
> >>
>
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: SF.net Giveback Program.
> Does SourceForge.net help you be more productive? Does it
> help you create better code? SHARE THE LOVE, and help us help
> YOU! Click Here: http://sourceforge.net/donate/
begin 666 TypeFactory.zip
M4$L#!!0````(`-MTA"\1&L1BE (``#P'``!S````1&5V+TED96$S,#(O<')O
M:F5C=',O4T9?1&5C96UB97(P,2]S<')I;F<O<W)C+V]R9R]S<')I;F=F<F%M
M97=O<FLO8F5A;G,O9F%C=&]R>2]S=7!P;W)T+U1Y<&5D1F%C=&]R>41E<V-R
M:7!T;W(N:F%V8:55P6[;, P]-T#^@:>A[0('PVYK46Q=,*#;, QK?T"V:$>K
M+!FBW-08]N^C)-MU&@?H4%]LT^3CXR,IK\_/EPLXA[LMPFWCE*F@=*+&G77W
MH BD(N]4WGJ4T!J)#CQ[?FI$L<48>&M+OQ,.X;LJT!!FP;I>+I8+]KD7%8)U
M5481>D3.<A2&LE(4WKHNH[9IK/,7(4K5X?$%05_2_9J-,7#=5W)C/#IV0F8J
M/ BM[8Y 0*$%4;)Q#HTU&D]PUS4H>RCP%G($B51PR2@C7.-LQ0QJX57!6%VL
M#RZ;JU&V)[UJ<8\$R@,*2FBMTO)H[J#D7GXU4%]%<!%H?]U\@W?9^[>PZ8RH
M50$_G7WL+N!W2QY:0G:98@0Y,F!>W+N=TAHJ-.B$9[^(N8=RA)> 2CV@@?*
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
M]7%1[OY\_X;F"TF]D#&1G(TSIT(\EV,4,KHO.:&>9X19#"='$7<K)FX0'ZC
MTO;&\DQL#"NXG("_YBGRSN'Z]7Z31OHO-!YD3;+DY>LY^1\].,#][Q\?Q>,S
M^0>C^JD!HJX/%YX*FNEZC,*G0J<WQ-$*P_(?_=X[<OCJE?>5?]J12[\#4$L#
M!!0````(`*Z:AB\SY% _4P<``!X8``!M````1&5V+TED96$S,#(O<')O:F5C
M=',O4T9?1&5C96UB97(P,2]S<')I;F<O<W)C+V]R9R]S<')I;F=F<F%M97=O
M<FLO8F5A;G,O9F%C=&]R>2]S=7!P;W)T+U1Y<&5D1F%C=&]R>4)E86XN:F%V
M8:586W/31A1^#C/Y#TLZP\A@E#X30C&!3#-#@4GRT#XQ:VEM+Y6UKG85)RW\
M]Y[+2CZZ. TES"1&/M?OW'7\].GA(_547:^,NMI4MERJ1:779NNJ/Y7U*K<^
M5'9>!Y.KNLQ-I0)0SC8Z6QEBO'*+L-654>]M9DIO4GQZ?/CH\!'0_*F71KEJ
MF7H2W4I.YT:7/EWH++CJ+O7U9N.J<()<=HT?'\!TSG_?P,.3[V!#^LCZ/]EF
MZ.[W\EZ4-EA=V+]UL*Y\=YN9#7YXB!AD]Y(#_QVW<8,@987V'J.EE4!%@>3"
MK$T92"<$3@<UKVV1`V&9J\J$NBJ1R8/6P@17DDA;^J#+# *W@.\VN@HVJPM=
MJ?RNU&N;J4WE;N\:I8T.S!Q,C>N[C<FC%2 JF I@X*Q0+S>OVF2K7$$:0NO
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
MV&86+#1P#-:QD&L'00N#MT@@";F)VNPP$[>ADU$3PK,SZ!G5U%U-H]UA4KG
MS]/W>Y^:ZPMH=8,L?X-UB.K\V]AWQVASYG/J61EJ+TC)#L*00. \F.!?!V_$
M!0^CDQUH:$X1[<QX0#;D8BKS' G0HT?2@B 3+(U@T=X@0^A@<9R7DQEWC/\X
ME?JM/2\X#NV;,TGHQ_JB\C(#;P&/@MXRS.GA8PI_M0"3::EGH]<WZ;(41H;'
MH\$X!<_+^BR++U!+`P04````" !JG(8OQ)]H'<,"```<&@``:0```$1E=B])
M9&5A,S R+W!R;VIE8W1S+U-&7T1E8V5M8F5R,#$O<W!R:6YG+W1E<W0O;W)G
M+W-P<FEN9V9R86UE=V]R:R]B96%N<R]F86-T;W)Y+W-U<'!O<G0O='EP961&
M86-T;W)Y+GAM;.6946_:,!#'GSMIW\&U]IJXT#Y,4Z J!:I(&T-MT+2GRI #
MHB5V9#NE?/LZH80V#2LD`QK&0S$.=_?W[\X^HUJ7CX&/'D!(C[,&KIEG& $;
M<==CDP8>.%WC*[YL?OYDG;9_7CN_^QTT!,HDZ@]:W^UKA+!!R%W_UN[=$-)V
MVJC5N>H1TNEAA*=*A=\(F<UFI@R%]C<6-( 9%W],+B;$52Y9S!N)2U-/8!U)
MQTH^)\.39(P\MX&'G/MZ[(!4+?V.]<.3D4^E;&#M[DV(A<]6QJ@96UFAX"$(
M-4=,?[N!X[^X:3U0/X*FC6B *,H86F3QU")+V]B31>(H6:%J*X7;2Y->$/J
MRDB[WY4VUQN/00!3952.Z4AQ,;>9`J''8,L?GI1:WV:JG\U-&84A%\ITYB&X
MW<7D^M5XRVCIDI:2T6O-;RP5%1-0J9DJDI?$Q8'6^7[^\Y?R'H@R*7>F5./H
M<77%TKGCH%*D/+)TGLOD1I<,DXHR/0-JRMV/0B@;P6;:PG/OGX.<'8[<+T]-
M>WQ54V\0WH**!(N15 1F[; P_P(PWKVZ3B>,#GWH"AXX"PD?E>MR7Y<D.RQ^
M<\@"MN,6&NANJN4/F*3*DV,/W/1YK3(L+W9>I:>&@1J[>2'#R+M(93%6)QM[
M/#-R06UX_:P^J?NRJ.J5(54_;$W5JU-3)4EM4E/[/0S=* CF+QENE8GV"^M\
M^O%=UP?%V8J%B&"7C;4ZVZY@8\VF;!N8B>U_U_S^.;&C/]K+$-/?>-SF2*$\
M-%>?^EGK7+E)C'3+RPU(I60V!++-P96?PA&$>A$]/;'25Z1E)FO-ELYY92KP
MO%@%9JNH-+&+8^\+!8CM]ZX121 8E<I C.HN\A1\&23.TET:WQ-\"?G928^R
MFH8E8(Q\/J+^NE^"Y#WNJ;OZ:W=K6L7F_LY?^UNS\;/^7F1T,8S__?($4$L#
M!!0````(`->:AB\DZ?<R'@$``#H"``!N````1&5V+TED96$S,#(O<')O:F5C
M=',O4T9?1&5C96UB97(P,2]S<')I;F<O=&5S="]O<F<O<W!R:6YG9G)A;65W
M;W)K+V)E86YS+V9A8W1O<GDO<W5P<&]R="]);G9A;&ED7T9A8W1O<GDP+FIA
M=F&54<%.PS ,/5.I_^#CMD/+?1= "*D2M^V.LM1MPU8GBEVF"?'O."%,'(=R
M2.2\]_S\W&XV=04;V$\(NQ =C3!$,^/9QR,XAMZQ1'=8!'M8J,<(HLC'8.R$
MF;CS@YQ-1'AU%HFQ2=6VKNI*,4<S(O@X-IREK\K-`0UQ,Q@K/EX:7D+P4;:)
MY>;TO('T\G,_:7%[`ZW;(TL!I].6P8L,="0851MA89W5$5A/[PM9<9[@[&0"
M`_M+P+XPGI%M=$&?64<\C$@8C2!(@JD$BR&+#'Z :_N<3V8\,/XCG.9O[Y)Q
M6 XG9[71K_6./LS)]6\%=@_PF6:]:UL%Y2]@IY;2$G5ENE]*MJ4K5E=KF%$F
MWROGZC@!=C[5U>5JG?/[JJMO4$L!`A0`% ````@`VW2$+Q$:Q&*4`@``/ <`
M`',``````````0`@`+:!`````$1E=B])9&5A,S R+W!R;VIE8W1S+U-&7T1E
M8V5M8F5R,#$O<W!R:6YG+W-R8R]O<F<O<W!R:6YG9G)A;65W;W)K+V)E86YS
M+V9A8W1O<GDO<W5P<&]R="]4>7!E9$9A8W1O<GE$97-C<FEP=&]R+FIA=F%0
M2P$"% `4````" `*7(0OU4]^,.,#``"$"P``<0`````````!`" `MH$E`P``
M1&5V+TED96$S,#(O<')O:F5C=',O4T9?1&5C96UB97(P,2]S<')I;F<O<W)C
M+V]R9R]S<')I;F=F<F%M97=O<FLO8F5A;G,O9F%C=&]R>2]S=7!P;W)T+TYA
M;65D0F5A;D9A8W1O<GE"96%N+FIA=F%02P$"% `4````" `X>80OH"P=AM,#
M``!O"@``:0`````````!`" `MH&7!P``1&5V+TED96$S,#(O<')O:F5C=',O
M4T9?1&5C96UB97(P,2]S<')I;F<O<W)C+V]R9R]S<')I;F=F<F%M97=O<FLO
M8F5A;G,O9F%C=&]R>2]S=7!P;W)T+U1Y<&5D1F%C=&]R>2YJ879A4$L!`A0`
M% ````@`KIJ&+S/D4#]3!P``'A@``&T``````````0`@`+:!\0L``$1E=B])
M9&5A,S R+W!R;VIE8W1S+U-&7T1E8V5M8F5R,#$O<W!R:6YG+W-R8R]O<F<O
M<W!R:6YG9G)A;65W;W)K+V)E86YS+V9A8W1O<GDO<W5P<&]R="]4>7!E9$9A
M8W1O<GE"96%N+FIA=F%02P$"% `4````" #;=(0OGY/OD0$!``"G`@``>0``
M```````!`" `MH'/$P``1&5V+TED96$S,#(O<')O:F5C=',O4T9?1&5C96UB
M97(P,2]S<')I;F<O<W)C+V]R9R]S<')I;F=F<F%M97=O<FLO8F5A;G,O9F%C
M=&]R>2]S=7!P;W)T+TEN=F%L:614>7!E9$9A8W1O<GE%>&-E<'1I;VXN:F%V
M85!+`0(4`!0````(`!FGA2^&P9))F@<``)T8``!N``````````$`( "V@6<5
M``!$978O261E83,P,B]P<F]J96-T<R]31E]$96-E;6)E<C Q+W-P<FEN9R]S
M<F,O;W)G+W-P<FEN9V9R86UE=V]R:R]B96%N<R]F86-T;W)Y+W-U<'!O<G0O
M5'EP961&86-T;W)Y4')O>'DN:F%V85!+`0(4`!0````(`,)MB"])P,' E H`
M`%HL``!P``````````$`( "V@8T=``!$978O261E83,P,B]P<F]J96-T<R]3
M1E]$96-E;6)E<C Q+W-P<FEN9R]S<F,O;W)G+W-P<FEN9V9R86UE=V]R:R]B
M96%N<R]F86-T;W)Y+W-U<'!O<G0O5'EP961&86-T;W)Y4W5P<&]R="YJ879A
M4$L!`A0`% ````@`PFV(+Z3$C/J'" ``TCD``',``````````0`@`+:!KR@`
M`$1E=B])9&5A,S R+W!R;VIE8W1S+U-&7T1E8V5M8F5R,#$O<W!R:6YG+W1E
M<W0O;W)G+W-P<FEN9V9R86UE=V]R:R]B96%N<R]F86-T;W)Y+W-U<'!O<G0O
M5'EP961&86-T;W)Y5&5S=%-U:71E+FIA=F%02P$"% `4````" #BFH8O;--Z
MJ!T!```R`@``;@`````````!`" `MH'',0``1&5V+TED96$S,#(O<')O:F5C
M=',O4T9?1&5C96UB97(P,2]S<')I;F<O=&5S="]O<F<O<W!R:6YG9G)A;65W
M;W)K+V)E86YS+V9A8W1O<GDO<W5P<&]R="]);G9A;&ED7T9A8W1O<GDQ+FIA
M=F%02P$"% `4````" #39(@O/^)!Y10!```R`@``< `````````!`" `MH%P
M,P``1&5V+TED96$S,#(O<')O:F5C=',O4T9?1&5C96UB97(P,2]S<')I;F<O
M=&5S="]O<F<O<W!R:6YG9G)A;65W;W)K+V)E86YS+V9A8W1O<GDO<W5P<&]R
M="])5&5S=$)E86Y?1F%C=&]R>3$N:F%V85!+`0(4`!0````(`/QDB"\S7P!+
M%0$``#("``!P``````````$`( "V@1(U``!$978O261E83,P,B]P<F]J96-T
M<R]31E]$96-E;6)E<C Q+W-P<FEN9R]T97-T+V]R9R]S<')I;F=F<F%M97=O
M<FLO8F5A;G,O9F%C=&]R>2]S=7!P;W)T+TE497-T0F5A;E]&86-T;W)Y,BYJ
M879A4$L!`A0`% ````@`_&2(+X7+P'4A`0``9P(``' ``````````0`@`+:!
MM38``$1E=B])9&5A,S R+W!R;VIE8W1S+U-&7T1E8V5M8F5R,#$O<W!R:6YG
M+W1E<W0O;W)G+W-P<FEN9V9R86UE=V]R:R]B96%N<R]F86-T;W)Y+W-U<'!O
M<G0O251E<W1"96%N7T9A8W1O<GDS+FIA=F%02P$"% `4````" #";8@O0M6$
MT!H!``!:`@``< `````````!`" `MH%D. ``1&5V+TED96$S,#(O<')O:F5C
M=',O4T9?1&5C96UB97(P,2]S<')I;F<O=&5S="]O<F<O<W!R:6YG9G)A;65W
M;W)K+V)E86YS+V9A8W1O<GDO<W5P<&]R="])5&5S=$)E86Y?1F%C=&]R>30N
M:F%V85!+`0(4`!0````(`&J<AB_$GV@=PP(``!P:``!I``````````$`( "V
M@0PZ``!$978O261E83,P,B]P<F]J96-T<R]31E]$96-E;6)E<C Q+W-P<FEN
M9R]T97-T+V]R9R]S<')I;F=F<F%M97=O<FLO8F5A;G,O9F%C=&]R>2]S=7!P
M;W)T+W1Y<&5D1F%C=&]R>2YX;6Q02P$"% `4````" #7FH8O).GW,AX!```Z
M`@``;@`````````!`" `MH%6/0``1&5V+TED96$S,#(O<')O:F5C=',O4T9?
M1&5C96UB97(P,2]S<')I;F<O=&5S="]O<F<O<W!R:6YG9G)A;65W;W)K+V)E
M86YS+V9A8W1O<GDO<W5P<&]R="]);G9A;&ED7T9A8W1O<GDP+FIA=F%02P4&
2``````\`#P`["0```#\`````
`
end
|